ホームページ >データベース >mysql チュートリアル >GROUP_CONCAT を使用して MySQL でデータをピボットし、動的列ヘッダーを処理する方法

GROUP_CONCAT を使用して MySQL でデータをピボットし、動的列ヘッダーを処理する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-06 09:44:43354ブラウズ

How to Pivot Data in MySQL Using GROUP_CONCAT and Handle Dynamic Column Headers?

MySQL PIVOT/CROSSTAB QUERY

データ分析では、多くの場合、データを垂直形式から水平形式に変換する必要があります。ピボットまたはクロス集計として。 MySQL では、これはさまざまな手法を使用して実現できます。

ピボット テーブルの作成

質問 1: 次の列を含むテーブルについて考えてみましょう。 app_id、transaction_id、mobile_no、node_id、customer_attribute、およびentered_value。タスクは、app_id、transaction_id、mobile_no でグループ化されたピボット テーブルを作成し、node_id の値が列ヘッダーになり、対応する Entered_value がセルに表示されるようにすることです。

答え: これGROUP_CONCAT を使用して実現できます。 function:

SELECT
  app_id,
  transaction_id,
  mobile_no,
  GROUP_CONCAT(CASE WHEN node_id = 1 THEN entered_value ELSE NULL END) AS Q1,
  GROUP_CONCAT(CASE WHEN node_id = 2 THEN entered_value ELSE NULL END) AS Q2,
  GROUP_CONCAT(CASE WHEN node_id = 3 THEN entered_value ELSE NULL END) AS Q3,
  GROUP_CONCAT(CASE WHEN node_id = 4 THEN entered_value ELSE NULL END) AS Q4,
  GROUP_CONCAT(CASE WHEN node_id = 5 THEN entered_value ELSE NULL END) AS Q5
FROM
  trn_user_log
GROUP BY
  app_id,
  transaction_id,
  mobile_no;

NAME_CONST の使用

質問 2: user_input1、user_input2 などを列ヘッダーとして使用する代わりに、に保存されている値を使用しますcustomer_attribute.

回答: これは NAME_CONST 関数を使用して実現できますが、指定された引数が正しくないためにエラーが発生しました:

SELECT
  app_id,
  transaction_id,
  mobile_no,
  NAME_CONST(customer_attribute, (CASE WHEN node_id = 1 THEN entered_value ELSE NULL END))
FROM
  trn_user_log;

この関数は定数を予期しています2 番目の引数の値なので、変更が必要です:

SELECT
  app_id,
  transaction_id,
  mobile_no,
  CASE node_id
    WHEN 1 THEN NAME_CONST(customer_attribute, entered_value)
    ELSE NULL
  END AS customer_attribute
FROM
  trn_user_log;

以上がGROUP_CONCAT を使用して MySQL でデータをピボットし、動的列ヘッダーを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。