SQL语句高级查询

本文详细介绍了SQL中的聚合函数,如AVG、SUM、MAX、COUNT及其使用场景。通过实例展示了如何进行分组查询、HAVING子句的运用以及如何进行多级分组。还探讨了ORDER BY和GROUP BY子句在分组查询中的作用。
摘要由CSDN通过智能技术生成

本文章通过学习《慕课网》学习所得

聚合函数

聚合函数可以对数据求和、求最大值和最小值、求平均值等等。

AVG平均值函数

AVG函数用于获得非空值的平均值,非数字数据统计结果为0

//求平均值 
SELECT
 AVG(sal+IFNULL(comm,0))
  FROM t_emp;

SUM 求和函数

SELECT SUM(ename) FROM t_emp;

MAX函数

MAX函数用于获得非空值的最大值

SELECT  MAX(comm) FROM t_emp;

COUNT函数

count(*)用于获得包含空值的记录数,COUNT(列名)用于获得包含非空值的记录数

SELECT 
   COUNT(*),COUNT(comm)
FROM t_emp;

例子

//查询10和20部门中,底薪超过2000元并且工龄超过15年的员工人数
SELECT COUNT(*)
FROM t_emp
WHERE deptno IN(10,20) AND sal>=2000
AND DATEDIFF(NOW(),HIREDATE)/365>=1;

分组查询

可以更加复杂一点

round()四舍五入函数

//查询1985年以后入职的员工,底薪超过公司平均底薪的员工数量
//采用分组查询
SELECT    deptno,ROUND(AVG(sal))
FROM t_emp GROUP BY deptno

逐级分组

GROUP BY子句的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对每个小区与分别进行数据汇总处理

// 分组查询中的某个个字段拼接成一个字符串
SELECT deptno,GROUP_COUNT(ename),COUNT(*)
  FROM t_emp WHERE SAL>=2000
  GROUP BY deptno;

HAVING子句

HAVING子句和where子句是相通的,但是WHERE子句在GROUP BY子句先执行,HAVING子句在GROUP BY子句后执行

问题:查询部门平均底薪超过2000元的部门编号

//错误示范
SELECT deptno
  FROM t_emp
  WHERE AVG(sal) >= 2000
  GROUP BY deptno;

分组的时候已经执行了聚合函数

// 正确执行方法
  SELECT deptno
    FROM t_emp
    GROUP BY deptno HAVING AVG(sal) >= 2000;

HAVING子句的用途
问题:查询每个部门中,1982年以后入职的员工超过两个人的部门编号

SELECT deptno 
  FROM t_emp
  WHERE hiredate >= "1982-01-01"
  GROUP BY deptno HAVING COUNT(*) >= 2;
order BY deptno ASC;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值