mysql_分组groupby和分组后的过滤having 可以按照任意字段分组,但是分组完毕后,⽐如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数。
聚合函数:
max 最⼤值
min 最⼩值
avg 平均值
sum 求和
count 总数
# 查询每个post字段下id的记录个数。
select post,count(id) as emp_count from employee group by post;
# 查询每个post字段下的salary字段数据的平均值。
select post,avg(salary) as emp_count from employee group by post;
强调:
groupby分组如果我们⽤unique的字段作为分组的依据,则每⼀条记录⾃成⼀组,这种分组没有意义
多条记录之间的某个字段值相同,该字段通常⽤来作为分组的依据
如果没有group by,则整个表为⼀组,同意可以使⽤聚合函数。
# 查询整个表中最⾼的salary的值。
select max(salary) as emp_count from employee;
group_concat函数:
# 查询并列出每种post字段下⾯的name字段。
select post,group_concat(name) as emp_count from employee group by post;
having(过滤)
#!!!执⾏优先级从⾼到低:where>group by>having
#1. Where发⽣在分组group by之前,因⽽Where中可以有任意字段,但是绝对不能使⽤聚合函数。
#2. Having发⽣在分组group by之后,因⽽Having中可以使⽤分组的字段,⽆法直接取到其他字段,可以使⽤聚合函数
# 查询以post字段分组后每个post字段下数量⼤于2的记录。
select post,group_concat(name),count(id) from employee group by post having count(id) >2;
# 查询以post字段分组后,每个post字段下salary字段数据平均值⼤于10000的记录。select post,avg(salary) from employee group by post having avg(salary) >10000;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论