ホームページ > データベース > mysql チュートリアル > UNION ALL と集計を使用して MySQL でピボット テーブルをシミュレートする方法

UNION ALL と集計を使用して MySQL でピボット テーブルをシミュレートする方法

Mary-Kate Olsen
リリース: 2025-01-09 15:16:42
オリジナル
188 人が閲覧しました

How to Simulate Pivot Tables in MySQL Using UNION ALL and Aggregation?

MySQL でのピボット テーブルのシミュレーション: UNION ALL と集計関数の使用

ピボット テーブルはデータ分析とレポート生成において重要な役割を果たし、列データを行ベースのデータに変換して、よりコンパクトで洞察に満ちた視覚化を実現します。 MySQL は UNPIVOT 関数と PIVOT 関数を直接提供しませんが、UNION ALL 関数と集計関数を巧みに組み合わせて同様の関数を実現できます。

データのピボットを解除しています

ピボット テーブルの最初のステップは、データを拡張するか、より柔軟な形式に変換することです。これには、データの各列に複数の行を作成することが含まれます。各行は列とその対応する値を表します。これを実現するには、UNION ALL 演算子を使用できます。

<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col2 AS value, 'col2' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col3 AS value, 'col3' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col4 AS value, 'col4' AS descrip
FROM yourTable;</code>
ログイン後にコピー

このクエリは次の結果を生成します:

id month value descrip
101 Jan A col1
102 Feb C col1
101 Jan B col2
102 Feb A col2
101 Jan NULL col3
102 Feb G col3
101 Jan B col4
102 Feb E col4

データのピボットの拡張

データが展開されたら、集計関数と CASE ステートメントを使用してデータをピボットし、目的のレポート形式を作成できます。

<code class="language-sql">SELECT descrip,
  MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS jan,
  MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS feb
FROM (
    SELECT id, month, col1 AS value, 'col1' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col2 AS value, 'col2' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col3 AS value, 'col3' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col4 AS value, 'col4' AS descrip
    FROM yourTable
) AS src
GROUP BY descrip;</code>
ログイン後にコピー

上記のクエリは次の結果を生成します:

descrip jan feb
col1 A C
col2 B A
col3 0 G
col4 B E

この結果は、必要なレポートの形式と一致します。これらのテクノロジーを通じて、MySQL にピボット テーブル関数を効果的に実装し、列ベースのデータを行ベースのレポートに簡単に変換できるため、より効率的な分析とレポートが可能になります。

以上がUNION ALL と集計を使用して MySQL でピボット テーブルをシミュレートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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