在 SQL 中,分组汇总数据通常使用 GROUP BY 语句配合聚合函数(如 COUNT、SUM、AVG、MAX、MIN)来实现。
下面从基础到进阶,系统讲解用法。
SELECT 分组列, 聚合函数(列)
FROM 表名
WHERE 条件
GROUP BY 分组列
ORDER BY 排序列;
执行顺序:
FROMWHEREGROUP BYSELECTORDER BY| 函数 | 作用 |
|---|---|
| COUNT() | 计数 |
| SUM() | 求和 |
| AVG() | 平均值 |
| MAX() | 最大值 |
| MIN() | 最小值 |
SELECT department, COUNT(*) AS emp_count
FROM employees
GROUP BY department;
SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department;
SELECT department, gender, COUNT(*) AS cnt
FROM employees
GROUP BY department, gender;
⚠️ WHERE 不能用于聚合结果,要用 HAVING
SELECT department, COUNT(*) AS cnt
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 8000;
SELECT department, SUM(salary) AS total
FROM employees
GROUP BY department
ORDER BY total DESC;
SELECT order_date, COUNT(*) AS order_cnt
FROM orders
GROUP BY order_date;
SELECT product_id, SUM(amount) AS total_sales
FROM sales
GROUP BY product_id;
SELECT user_id, MAX(order_amount) AS max_amount
FROM orders
GROUP BY user_id;
-- 错误
SELECT department, name FROM employees GROUP BY department;
-- 正确
SELECT department, COUNT(*) FROM employees GROUP BY department;
WHERE 在分组前过滤,HAVING 在分组后过滤GROUP BY ROLLUP / CUBE(小计、总计)GROUPING SETSSUM() OVER (PARTITION BY ...))如果你有具体表结构或业务场景,我可以直接帮你写 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。