331 字
2 分钟
MySQL学习笔记 (6)
NOTE基于 MySQL 26.7。聚合函数
聚合函数
聚合函数对一组值进行计算,返回单个值。
| 函数 | 描述 |
|---|---|
COUNT(*) | 行数 |
COUNT(col) | col 不是 NULL 的个数 |
COUNT(DISTINCT col) | 去重后的个数 |
SUM(expr) | 合计 |
AVG(expr) | 平均值 |
MIN(expr) | 最小值 |
MAX(expr) | 最大值 |
SELECT COUNT(*) AS n_emp, COUNT(manager_id) AS n_with_mgr, AVG(salary) AS avg_salFROM employee;没有 GROUP BY 时,整张表(经过 WHERE 之后)算作一组。
COUNT(phone) 只统计填了手机号的行;COUNT(*) 统计所有行。
GROUP BY
GROUP BY 用于结合聚合函数,按一个或多个列分组。
SELECT dept_no, COUNT(*) AS n, AVG(salary) AS avg_salFROM employeeGROUP BY dept_no;SELECT 里没有用聚合函数的列,一般要出现在 GROUP BY 中。下面这样是不对的:按部门分组,却直接选出每个人的姓名。
SELECT dept_no, last_name, COUNT(*)FROM employeeGROUP BY dept_no;按多列分组:
GROUP BY dept_no, job_idWHERE 在分组之前筛选行。分组之后的条件要用 HAVING。
HAVING
HAVING 用于筛选分组后的结果。
SELECT dept_no, COUNT(*) AS nFROM employeeWHERE salary >= 3000GROUP BY dept_noHAVING COUNT(*) >= 2ORDER BY n DESC;HAVING 里可以使用聚合函数,WHERE 里不行。
NULL 和聚合
分组键是 NULL 的行会分到同一组。
某一组里 SUM 的值全是 NULL 时,结果是 NULL,不是 0。需要显示 0 时可以写成:
COALESCE(SUM(amount), 0)参考
MySQL学习笔记 (6)
https://blog.chuwu.top/posts/sql/mysql6/