ホームページ > データベース > mysql チュートリアル > UNION ALL または CROSS JOIN を使用して MySQL 列を行にアンピボットする方法

UNION ALL または CROSS JOIN を使用して MySQL 列を行にアンピボットする方法

Linda Hamilton
リリース: 2025-01-20 05:56:09
オリジナル
650 人が閲覧しました

How to Unpivot MySQL Columns into Rows Using UNION ALL or CROSS JOIN?

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 ALLCROSS JOIN の両方の手法は、MySQL で列のピボットを解除するための堅牢なソリューションを提供し、後続の処理や視覚化のために列データを行に変換できるようにします。

以上がUNION ALL または CROSS JOIN を使用して MySQL 列を行にアンピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート