Group By和Having的使用

1.掌握group by的应用场景和使用

2.掌握having的应用场景及使用

我们已经掌握使用select语句结合where查询条件获取需要的数据,但在实际的应用中,还会遇到下面这类需求,又该如何解决呢?
1-公司想知道每个部门有多少名员工
2-班主任想统计各科第一名的成绩
3-某门店想掌握男、女性会员的人数及平均年龄

从字面上理解,group by 表示根据某种规则对数据进行分组,它必须配合
聚合函数进行使用,对数据进行分组后可以进行count、sum/max和min等运算。

#group by 语法
select column_name,aggregate_function(column_name)
from table_name
group by column_name


说明:
1.aggregate_function表示聚合函数
2.group by 可以对一列或多列进行分组

在SQL增加Having子句的原因是什么?
原因是因为where关键字无法与聚合函数一起使用,
Having 子句可以对分组后的各组数据进行筛选。

#having语法
select column_name,aggregate_function(column_name)
from table_name
where column_name operator value
group by column_name
having aggregate_function(column_name) operator value


按照性别和人数进行分组,即求出男女各有多少人,使用group by
mysql> select sex,count(*) from employee group by sex;
算出来男八人,女五人。

每个部门有多少员工
mysql> select dept,count(*) from employee group by dept;
结果是部门ABC分别是6/3/4个。

每个部门的薪水总和
mysql> select dept,sum(salary) from employee group by dept;

每个部门薪资最高的是多少
每个部门薪资最低的是多少
mysql> select dept, max(salary) from employee group by dept;
mysql> select dept, min(salary) from employee group by dept;

砍掉部门人数小于5的部门
mysql> select dept,count(*) from employee group by dept having count(*)<5;

查询最高薪资过万的部门
mysql> select dept,max(salary) from employee group by dept having max(salary)>=10000;
发布了82 篇原创文章 · 获赞 19 · 访问量 4635

猜你喜欢

转载自blog.csdn.net/ABCisCOOL/article/details/105257684