行转列
本课属于 Coddy SQL 学习旅程的“进阶内容”单元。第 14 课,共 27 课。
将条件聚合与 GROUP BY 结合起来,把行转换为列。这相当于 SQL 中的电子表格透视表。
假设 sales 中有类似 (month, product, units) 的行。要查看每个月一行、每种产品一列的结果:
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 …) 看到的都是某个月的行;CASE 会选出一个产品对应的部分。
挑战
简单可用的表和列:
sales:month、product、units
将数据透视,使每一行对应一个 month,并包含以下列:
monthapples:该月产品'apples'的units总数bananas:该月产品'bananas'的units总数cherries:该月产品'cherries'的units总数total:该月所有产品的units总数
只返回 total 至少为 20 的月份。按 month 排序。
亲手试试
SELECT month,
-- 每种产品各用一个 SUM(CASE ...),再加上总计
FROM sales
GROUP BY month
-- 筛选出 total >= 20 的月份
ORDER BY month
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
进阶内容中的所有课
自己练习: SQL 在线编辑器