一、分组函数
(1)5种分组函数及其基本用法
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:所有的分组函数都是对“某一组”数据进行操作的。
分组函数也叫多行处理函数,即输入多行,最终输出结果为1行。
分组函数会自动忽略NULL。
单行处理函数:输入一行,输出一行
注意:所有数据库都是这样规定的,只要有NULL参与的运算结果一定是NULL。
空处理函数:ifnull()
ifnull(可能为null的数据,被当做什么处理):属于单行处理函数,可以对函数进行预处理
(2)count(*)和count(具体的某个字段)有什么区别?
count(*)统计总计数条数;count(具体的某个字段)统计的是该字段当中不为NULL的数据总数。
(3)group by 和 having
group by : 按照某个字段或者某些字段进行分组
having : 是对分组之后的数据进行再次过滤
案例:找出每个工作岗位的最高薪资。
注意:分组函数一般会和 group by 联合使用,并且任何一个分组函数都是在group by 语句执行结束之后才会执行。当一条sql语句没有group by 的时候,整张表的数据会自成一组。
虽然上述语句在mysql中可以执行,但明显结果是错误的,没有意义的。当一条语句中有group by 的话,select 后面只能跟分组函数和参与分组的字段。
案例:找出每个部门的最高薪资,要求显示薪资大于2900 的数据。
having 过滤效率较低,where 过滤效率高,建议能够使用where的优先使用where。
案例: 找出每个部门的平均薪资,要求显示薪资大于2000的数据。
(4)分组函数不可以直接使用在where子句当中。
group by 是在 where 执行之后才会执行的。
(5)多个字段联合分组
案例:找出每个部门不同工作岗位最高薪资。
二、完整的DQL语句
语法结构:
select ... from ... where ... group by ... having ... order by ...
三、查询结果的去重
distinct 关键字去除重复记录。distinct 只能出现在所有字段的最前面,表示后面所有字段联合起来去重。