MySQL43--HAVING子句
HAVING子句
HAVING子句用于指定分组的条件;
在 SQL 中增加 HAVING 子句原因是:WHERE 关键字无法与聚合函数一起使用;
-- 统计每个图书分类包含的图书数量,并仅返回数量>=15的分类信息
SELECT categoryname,COUNT(id) AS num FROM t13 GROUP BY categoryname HAVING num >=15;
WHERE和HAVING区别
WHERE是对整张表的数据,进行过滤,可以单独使用。
HAVING是对分组后的数据,进行过滤,不可以单独使用,必须和GROUP BY一起使用。
-- 查询emp表中,部门的平均工资大于2000的,部门的编号(deptno),人数,最高工资,平均工资,根据部门人数升序排列
SELECT deptno,COUNT(*),MAX(sal),AVG(sal)
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 2000
ORDER BY COUNT(*) ASC;
-- 查询emp表中,部门的人数大于等于3人的,部门的编号(deptno),人数,工资总和,根据工资总和降序排列
SELECT deptno,COUNT(*),SUM(sal)
FROM emp
GROUP BY deptno
HAVING COUNT(*) >=3
ORDER BY SUM(sal) DESC;
-- 查询emp表中,工资在1000~5000之间的,部门的编号(deptno),人数,平均工资,最高工资,要求最高工资大于3000,根据人数升序排列
SELECT deptno,COUNT(*),AVG(sal),MAX(sal)
FROM emp
WHERE sal BETWEEN 1000 AND 5000
GROUP BY deptno
HAVING MAX(sal) > 3000
ORDER BY COUNT(*) ASC;
-- 查询emp表中,员工姓名(ename)不包含字母C并且部门编号(deptno)是20号或者10号部门的,部门的编号(deptno),人数,平均工资,最高工资,要求最高工资大于2000,根据人数降序排列
SELECT deptno,COUNT(*),AVG(sal),MAX(sal)
FROM emp
WHERE NOT ename LIKE '%C%' AND (deptno=10 OR deptno=20)
GROUP BY deptno
HAVING MAX(sal) > 2000
ORDER BY COUNT(*) DESC;
SELECT deptno,COUNT(*),AVG(sal),MAX(sal)
FROM emp
WHERE NOT ename LIKE '%C%' AND deptno in (20,10)
GROUP BY deptno
HAVING MAX(sal) > 2000
ORDER BY COUNT(*) DESC;
本文来自博客园,作者:暄总-tester,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15451610.html

浙公网安备 33010602011771号