1.分组函数:
count (统计,取得记录数)
sum (求和)
avg (取平均)
max (取最大的数)
min (取最小的数)
注意:分组函数自动忽略空值,不需要手动加where条件排除空值。
select count(*)from emp where xxx (符合条件的所有记录总数)
select count(comm)from emp (comm这个字段中不为空的元素总数)
注意:分组函数不能直接使用在where关键字后面
distinct (去除重复记录,distinct只能出现在所有字段的最前方)
分组查询:
1.分组查询设计到的两个子句是:
group by
having
2.group by:
order by【表示通过哪个或者哪些字段进行排序】
group by【表示通过哪个或者哪些字段进行分组】
重点:若一条DQL语句当中有group by 子句,那么select关键字后面只能跟参与分组的字段和分组函数。
where关键字后面不能直接使用分组函数。
分组函数必须在分组完成之后执行,而分组需要group by,而group by在where后执行。
3.having:
having和where功能都是为了完成数据的过滤
where 和having后面都添加条件
where在group by之前完成过滤
having在group by 之后完成过滤
原则:
尽量在where中过滤,无法过滤的数据,通常都是需要先分组之后再过滤,这个时候可以选择使用having。
效率问题。
一个完整的DQL语句的总结:
select
...
from
...
where
...
group by
...
having
...
order by
...
第一:以上的关键字顺序不能变,严格遵守。
第二:执行顺序:
1.from (从某张表中检索数据)
2.where (经过某条件进行过滤)
3.group by (然后分组)
4.having (分组之后补满意再过滤)
5.select (查询出来)
6.order by (排序输出)