按单列与多列 GROUP BY
按一个或多个列对行分组,以生成小计和类别明细,并阅读 GROUP BY 查询计划。
按单列与多列 GROUP BY 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
GROUP BY 的作用
GROUP BY 按一个或多个列值将行划分为多个组,然后对每个组应用聚合函数。
按单列分组
统计每位用户的订单总数:
SELECT user_id, COUNT(*) AS order_count, SUM(total) AS revenue
FROM orders
GROUP BY user_id
ORDER BY revenue DESC;按多列分组
按类别和国家划分子组:
SELECT country, category, SUM(total) AS revenue
FROM orders o
JOIN products p ON p.id = o.product_id
JOIN users u ON u.id = o.user_id
GROUP BY country, category
ORDER BY country, revenue DESC;每个 SELECT 选出的列都必须分组或聚合
标准 SQL 规则:
-- WRONG — email is neither grouped nor aggregated:
SELECT user_id, email, COUNT(*)
FROM orders
GROUP BY user_id; -- ERROR
-- RIGHT — group by both, or use an aggregate:
SELECT user_id, MAX(email) AS email, COUNT(*)
FROM orders
GROUP BY user_id;按表达式进行 GROUP BY
按表达式的结果进行分组(例如按月份分组):
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY date_trunc('month', created_at)
ORDER BY month;按位置或别名进行 GROUP BY
您可以按 SELECT 列表中的位置或别名进行分组(PostgreSQL):
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY month -- alias
ORDER BY 1; -- position分组集合、ROLLUP、CUBE
在一次查询中计算多个分组,非常适合计算小计:
SELECT country, category, SUM(total)
FROM orders o JOIN ...
GROUP BY ROLLUP (country, category);
-- Returns: per (country, category), per country, grand total空分组不存在
GROUP BY 只会返回至少包含一行的分组。如果您希望显示每个类别(包括订单数为零的类别),请从主列表执行 LEFT JOIN,然后进行聚合。
GROUP BY 与索引
规划器可能会使用哈希聚合(构建分组哈希表),也可能使用排序后分组的策略。在分组列上建立索引,可以让第二种方式更快。
窗口函数与 GROUP BY
GROUP BY 会合并行。窗口函数会在保留每一行的同时添加聚合列。请选择合适的工具——相关内容将在“窗口函数深入解析”中介绍。
HAVING 与 WHERE 中的别名
逻辑顺序:FROM → WHERE → GROUP BY → HAVING → SELECT。WHERE 无法查看聚合结果,而 HAVING 可以。
回顾
GROUP BY 是报表查询的主力。
- 每个 SELECT 选出的列都必须分组或聚合
- 可以按列、表达式或别名进行分组
- 使用 ROLLUP/CUBE/GROUPING SETS 创建交叉表
快速检查
在 GROUP BY country 查询中,SELECT 列表是否可以包含既未聚合也未分组的 city 列?
常见问题解答
「按单列与多列 GROUP BY」课时是免费的吗?
是的 — 「按单列与多列 GROUP BY」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「按单列与多列 GROUP BY」这节课中我会学到什么?
按一个或多个列对行分组,以生成小计和类别明细,并阅读 GROUP BY 查询计划。 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「按单列与多列 GROUP BY」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- COUNT、SUM、AVG、MIN、MAX
- 按单列与多列 GROUP BY
- HAVING 与 WHERE
- 常见陷阱:聚合中的 NULL