MySQL 列を行に再構築する
データ変換はデータベース管理における一般的なタスクです。 MySQL では、データ分析やプレゼンテーションを改善するために、列データを行に変換する (アンピボットとして知られるプロセス) ことが頻繁に必要になります。 MySQL には専用のアンピボット関数がありませんが、この変換は UNION ALL
クエリまたは CROSS JOIN
.
UNION ALL
メソッド
効果的な戦略の 1 つは、UNION ALL
演算子を使用することです。
<code class="language-sql">SELECT id, 'a' AS col, a AS value FROM yourtable UNION ALL SELECT id, 'b' AS col, b AS value FROM yourtable UNION ALL SELECT id, 'c' AS col, c AS value FROM yourtable;</code>
このクエリは、列名 (id
) とそれに対応する値 (col
) とともに value
列を取得します。 結果は、各行が単一の列と値のペアを表す再構築されたデータセットです。
CROSS JOIN
アプローチ
代わりに、CROSS JOIN
を使用することもできます。
<code class="language-sql">SELECT t.id, c.col, CASE c.col WHEN 'a' THEN a WHEN 'b' THEN b WHEN 'c' THEN c END AS data FROM yourtable t CROSS JOIN ( SELECT 'a' AS col UNION ALL SELECT 'b' UNION ALL SELECT 'c' ) c;</code>
ここで、yourtable
(t
というエイリアス) は、列名のリスト (col
) を生成するサブクエリと結合されています。 CASE
ステートメントは、列名に基づいて適切な値を動的に選択します。 結果は、UNION ALL
メソッドと同様に、各行に id
、列名、およびそれに関連付けられた値が含まれるフラット化されたデータセットです。
UNION ALL
と CROSS JOIN
の両方の手法は、MySQL で列のピボットを解除するための堅牢なソリューションを提供し、後続の処理や視覚化のために列データを行に変換できるようにします。
以上がUNION ALL または CROSS JOIN を使用して MySQL 列を行にアンピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。