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;