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 サイトの他の関連記事を参照してください。