Menu
CoddyTech

行转列

本课属于 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 month

GROUP BY 分组后,每个 SUM(CASE …) 看到的都是某个月的行;CASE 会选出一个产品对应的部分。

challenge icon

挑战

简单

可用的表和列:

  • sales:month、product、units

将数据透视,使每一行对应一个 month,并包含以下列:

  • month
  • apples:该月产品 '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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

进阶内容中的所有课

自己练习: SQL 在线编辑器