在 SQL 中,GROUP BY 用于按一个或多个列对查询结果进行分组,通常配合聚合函数(如 COUNT、SUM、AVG、MAX、MIN)使用。
SELECT 列1, 聚合函数(列2)
FROM 表名
[WHERE 条件]
GROUP BY 列1
[ORDER BY ...];
⚠️ 注意:
SELECT 中出现的非聚合列,必须出现在 GROUP BY 中
统计每个部门的员工人数:
SELECT department, COUNT(*) AS emp_count
FROM employees
GROUP BY department;
统计每个部门、每个职位的员工数:
SELECT department, job, COUNT(*)
FROM employees
GROUP BY department, job;
⚠️ WHERE 不能筛选聚合结果,要用 HAVING
查询人数大于 5 的部门:
SELECT department, COUNT(*) AS cnt
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
ORDER BY avg_salary DESC;
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
SELECT name, COUNT(*)
FROM employees
GROUP BY department;
❌ 错误:name 不在 GROUP BY 中,也不是聚合列
避免“隐藏列”分组,写清楚所有分组列。
如果你用的是 MySQL / SQL Server / Oracle / PostgreSQL,或者想结合具体表结构举例,我可以给你写专用 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。