Menu
Coddy logo textTech

行から列へのピボット

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 month

SUM(CASE …) が参照する GROUP BY バケットは1ヶ月分の行です。CASE は1つの製品のスライスを選択します。

challenge icon

チャレンジ

簡単

利用可能なテーブルとカラム:

  • <strong>sales</strong>: <strong>month</strong>, <strong>product</strong>, <strong>units</strong>

各行が1つの month になるようにデータをピボットし、以下のカラムを含めてください:

  • month
  • apples: その月の製品 'apples'units 合計
  • bananas: 'bananas' も同様
  • cherries: 'cherries' も同様
  • total: その月の全製品の units 合計

total が少なくとも 20 である月のみを返してください。month で並べ替えてください。

チートシート

GROUP BY条件付き集計 を使用して、行を列にピボットします:

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,
    SUM(units) AS total
FROM sales
GROUP BY month
HAVING SUM(units) >= threshold
ORDER BY month

SUM(CASE …) は、各 GROUP BY バケット内でその製品に一致する行のみを集計します。

自分で試してみよう

SELECT month,
       -- 製品ごとに1つの SUM(CASE ...)、および合計
FROM sales
GROUP BY month
-- 合計が >= 20 の月に絞り込む
ORDER BY month
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

応用のすべてのレッスン