行を列にピボット
CoddyのSQLジャーニー「応用」セクションの一部。レッスン 14/27。
条件付き集計と GROUP BY を組み合わせて、行を列に変換します。これはスプレッドシートのピボットテーブルに相当する SQL 版です。
sales に (month, product, units) のような行があるとします。月ごとに1行、商品ごとに1列を表示するには:
SELECT
month,
SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b
FROM sales
GROUP BY monthGROUP BY バケットが各 SUM(CASE …) に対して見るのは、1 か月分の行です。CASE は 1 つの product の部分を選びます。
チャレンジ
簡単利用可能なテーブルと列:
sales:month、product、units
データをピボットし、各行が1つのmonthとなるように、次の列を含めてください:
monthapples:その月の商品'apples'の合計unitsbananas:'bananas'についても同様cherries:'cherries'についても同様total:その月のすべての商品の合計units
totalが少なくとも20である月のみを返してください。monthの順に並べてください。
自分で試してみよう
SELECT month,
-- 製品ごとに1つのSUM(CASE ...)、および合計
FROM sales
GROUP BY month
-- 合計 >= 20 の月に絞り込む
ORDER BY month
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
応用のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド