十、GROUP BY 和 HAVING 的使用

2021-06-25 15:14:45 浏览数 (1)

一、group by 应用场景

在实际应用中我们会遇到如下的场景:

  • 公司想了解每个部门有多少员工;
  • 班主任想统计每科第一名的成绩;
  • 连锁店想知道每个门店男女员工的数量以及平均年龄。

这时我们就可以使用 group by 语句来解决这类需求。从字面上来理解,group by 表示根据某种规则对数据进行分组,他必须配合聚合函数进行使用,对数据进行分组后可以进行 countsumavgmaxmin 运算。语法如下:

代码语言:javascript复制
SELECT column_name, aggregate_function(column_name) 
FROM table_name
GROUP BY column_name

TIP: aggregate_function:表示聚合函数 group by :可以对一列或者多列进行分组

例如:

  1. 查询出全校有多少名男学生和女学生
代码语言:javascript复制
select sex, count(*) from student group by sex;
  1. 查询每个班级有多少学生
代码语言:javascript复制
select class, count(*) from student group by class;
  1. 查询每个门店员工薪资总和
代码语言:javascript复制
select dept,sum(salary) from employee group by dept;
二、having 的使用

在 SQL 中增加 HAVING 子句原因是, WHERE 关键子无法与聚合函数一起使用。 HAVING 子句可以对分组后的各组数据进行筛选。语法如下:

代码语言:javascript复制
SELECT column_name,aggregate_funtion(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

例如:

  1. 查询人数小于30人的班级
代码语言:javascript复制
select class,count(*) from student group by class having count(*)<30
  1. 查询每个门店薪资大于5000的员工
代码语言:javascript复制
select dept,max(salary) from employee group by dept having max(salary)>5000

0 人点赞