MySQL基础学习(六)——聚合函数
目录
聚合函数:作用于一组数据,并对一组数据返回一个值。
1、聚合函数类型
(1)AVG(x)
SELECT AVG(salary)
FROM employees
(2)SUM(x)
SELECT SUM(salary)
FROM employees
(3)MAX(x)
SELECT MAX(salary)
FROM employees
(4)MIN(x)
SELECT MIN(salary)
FROM employees
(5)COUNT(x)
SELECT COUNT(salary)
FROM employees
计算表中的记录数有三种方法:
count(*)
count(1)
count(具体字段):不一定对
因为计算指定个数的字段时,是不计算null值
SELECT COUNT(commission_pct)
FROM employees
2、聚合函数的基本使用
(1)单列分组
可以使用GROUP BY子句将表中的数据分成若干组
SELECT columnFROM table[ WHERE condition][ GROUP BY group_by_expression][ ORDER BY column];
SELECT department_id,avg(salary),sum(salary)
FROM employees
GROUP BY department_id
此时就会以department_id进行分组。展示每个组的最大最小值
(2)多列分组
SELECT department_id,job_id,avg(salary)
FROM employees
GROUP BY department_id,job_id
此时的记录数就和单列查到的不一样了
(3)WITH ROLLUP 关键字
使用 WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。
SELECT department_id,avg(salary)
FROM employees
GROUP BY department_id with ROLLUP
注意:
当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的。
3、HAVING的使用
过滤分组: HAVING 子句1. 行已经被分组。2. 使用了聚合函数。3. 满足 HAVING 子句中条件的分组将被显示。4. HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。
SELECT department_id,max(salary)
FROM employees
GROUP BY department_id
HAVING max(salary)>20000
WHERE和HAVING的对比
# 这种方法比下面方法效率高
SELECT department_id,max(salary)
FROM employees
WHERE department_id in (10,20,30,40)
GROUP BY department_id
HAVING max(salary)>10000
SELECT department_id,max(salary)
FROM employees
GROUP BY department_id
HAVING max(salary)>10000 and department_id in (10,20,30,40)