MySQL のクロス集計またはピボット クエリを使用すると、通常は行指向の構造からデータを変換できます。列指向であり、分析とプレゼンテーションが容易になります。クロス集計クエリの使用方法を理解するために、実際の例を詳しく見てみましょう。
次の構造を持つテーブルについて考えてみましょう:
app_id transaction_id mobile_no node_id customer_attribute entered_value 100 111 9999999999 1 Q1 2 100 111 9999999999 2 Q2 1 100 111 9999999999 3 Q3 4 100 111 9999999999 4 Q4 3 100 111 9999999999 5 Q5 2 100 222 8888888888 4 Q4 1 100 222 8888888888 3 Q3 2 100 222 8888888888 2 Q2 1 100 222 8888888888 1 Q1 3 100 222 8888888888 5 Q5 4
これらのレコードを次のように表示したいとしますformat:
app_id transaction_id mobile Q1 Q2 Q3 Q4 | Q5 100 111 9999999999 2 1 4 3 2 100 222 8888888888 3 1 2 1 4
これを実現するには、クロス集計クエリを利用します。ただし、最初の試行では、データ ポイントごとに複数の行を取得しましたが、これは望ましい結果ではありません。
次の調整されたクエリにより、望ましい結果が得られます:
SELECT app_id, transaction_id, mobile_no, MAX(CASE WHEN node_id = 1 THEN entered_value END) AS Q1, MAX(CASE WHEN node_id = 2 THEN entered_value END) AS Q2, MAX(CASE WHEN node_id = 3 THEN entered_value END) AS Q3, MAX(CASE WHEN node_id = 4 THEN entered_value END) AS Q4, MAX(CASE WHEN node_id = 5 THEN entered_value END) AS Q5 FROM trn_user_log GROUP BY app_id, transaction_id, mobile_no
値を使用したいという要望も表明しましたcustomer_attribute 列から列ヘッダーとして取得します。 NAME_CONST 関数はこの目的には適していませんが、望ましい結果を達成できる手法を利用できます。ただし、正確な解決策を可能にするために、希望する結果についてさらに明確にしてください。
以上がデータを行から列にピボットする MySQL クロス集計クエリを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。