第六章 聚合函数和分组查询

97 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


前言


提示:以下是本篇文章正文内容,下面案例可供参考

1.SUM函数

定义:返回选取的某列值的总和 语法:

    sum(参数) --参数为某一列的字段名

2.max函数

定义:MAX函数返回选取的某列的最大值。 语法:

    max(参数)--参数为某一列的字段名

3.min函数

定义:MIN函数返回选取的某列的最小值。 语法:

    min(参数)  --参数为某一列的字段名

4.avg函数

定义:AVG函数返回选取的某列的平均值。 语法:

    avg(参数)--参数为某一列的字段名

5.count函数

定义:COUNT函数返回选取的某列或记录的行数。

   ==写法一:==
   COUNT(*) --获取表行数。
   ==写法二:==
   COUNT(column) --获取表中column列不为空的行数。

6.分组 group by

GROUP BY的含义和作用: 其作用是通过一定的规则将一个数据集划分为若干个小的区域,然后针对若干个小区域进行统计汇总,常和聚合函数在一起去使用 语法:

      GROUP  BY  字段列  [HAVING <条件表达式>]

7.having

HAVING的含义和作用:

HAVING子句的作用是筛选满足条件的组,即在分组之后过滤数据。 使用 HAVING子句中的条件用于显示特定的组,条件中经常包含聚合函数。 HAVING子句在GROUP BY子句之后。

注意:

  • 当分组进行筛选的时候,用having,其他时候用where

  • having可以和where一起使用

  • 用having就一定要和group by 连用

  • 但是用group by 不一定有having(只是一个筛选条件的作用而已)

习题

---1.SUM、MAX和MIN聚合函数
 --从员工表中查询出每个月要给员工发多少工资
 select sum(salary) 总工资 from Employee
 --查询最高的工资
 select max(salary) 最高工资 from Employee
 --查询最低工资
 select min(salary) 最低工资 from Employee
 --查询云南保山员工的最高工资,最低工资
 select max(salary)最高工资,min(salary) 最低工资 from Employee where address='云南保山'
---2.	AVG和COUNT函数
 --查询整个公司的平均工资
 select AVG(salary) 整个公司的平均工资 from Employee
 --查询云南保山员工的平均工资
 select AVG(salary) 云南保山员工的平均工资 from Employee where address='云南保山'
 --查询部门经理的平均工资
 select AVG(salary) 部门经理的平均工资 from Employee where zhiwu='部门经理'
 --查询员工总数
 select count(*)员工总数 from Employee
 --查询工资大于10000的员工的人数
 select count(*) 工资大于10000的员工的人数 from Employee where salary>10000
 --查询云南保山的员工人数
 select count(*)员工总数 from Employee where address='云南保山'
 --查询员工人数,地址不为null的人数
 select count(*) 地址不为null的人数 from Employee where address != 'null'

---3.分组查询
 --根据地址分组,显示不同地区的员工数
 select address,count(*) 员工数 from Employee group by address
 --根据地址分组,显示不同地区的员工的 平均工资,最高工资,最低工资
 select address,avg(salary) 平均工资,max(salary) 最高工资,min(salary) 最低工资 from Employee group by address
 --显示不同地区的部门经理有多少人,根据人数排序
 select address,count(zhiwu) from Employee group by address order by count(zhiwu)
 --显示每个岗位的平均工资,最高工资,最低工资,根据平均工资排序
 select zhiwu 岗位,avg(salary) 平均工资,max(salary)最高工资,min(salary) 最低工资 from Employee group by zhiwu order by avg(salary)

---4.多字段分组和HAVING子句
 --根据地址和岗位分组,显示不同地区不同岗位的人数,和平均工资
 select address 地址,zhiwu 岗位,count(*) 员工数,avg(salary) 平均工资 from Employee group by address,zhiwu
 --根据地址分组,显示员工数大于1的地区和员工数
 select address 地区,count(*) 员工数 from Employee group by address having count(address)>1
 --根据地址分组,显示员工平均工资大于10000的地区和平均工资
 select address 地区,avg(salary) 平均工资 from Employee group by address having avg(salary)>10000
 --显示不同地区不同岗位的平均工资,最高工资,最低工资,要求显示平均工资大于10000的,然后按平均工资排序
 select address 地区,zhiwu 岗位,avg(salary) 平均工资,max(salary)最高工资,min(salary) 最低工资 
 from Employee group by address,zhiwu having avg(salary)>10000 order by avg(salary)