聚合函数
count
统计记录的条数。通常的使用方法是
select count(*) from tb_example
可以查看表中的数据值
min和max
最大和最小值的数据
select max(字段值) from tb_example
select min(字段值) from tb_example
avg
得到平均值
select avg(字段值) from tb_example
sum
值求和
select sum(字段值) from tb_example
分组查询
PS.group by的分组不能使用select *
进行简写,会导致报错
分组统计
利用聚合函数和分组查询来实现分组统计
select gender, count(*) as '人数'
from tb_emp
group by gender;
就可以获得数据以gender的值分组统计,查询结构可能如图:
gender | 人数 |
---|---|
男 | 24 |
女 | 12 |
有条件的分组统计
在上面的基础上添加where
语句可以对需要分组的对象进行筛选,例如:
select gender, count(*) as '人数'
from tb_emp
where name like '王%'
group by gender;
就可以筛选出name
字段以王
开头的记录,再进行分组。
having(对于分组结果进行筛选)
因为执行顺序的where
优先于聚合函数,所以where
中无法使用聚合函数。要对分组后的结果进行筛选,需要再group by
后面使用having
关键词。例如:
select job, count(*) as '人数'
from tb_emp
group by job having count(*) > 2;
会展示job
字段分组结果中统计值>2的结果
多条件分组
分组排序支持以多个字段作为条件排序
例如查询各工作的男性与女性的分别人数,可以使用如下语句:
select job, sex, count(*) as '人数'
from tb_emp
group by job, sex;
with rollup
写在group by 语句最后,作用是做一行汇总
mySQL特有
PS.只在mySQL里有个可以使用
group_concat函数,可以将该分组的所有记录的某个内容拼接起来
group_concat([distinct] 字段名 order by 字段名 [separator] ‘分隔符’)
select job, gender, count(*) as '人数',
group_concat(name order by name separator ',') as '名单'
from tb_emp
group by job, gender
如上,就可以把每条记录的中记录的人的名字放在表中。