1.Having
子句是SELECT語句的可選子句。它用於過濾由 group by 子句返回的行分組。
一般用法:having一般和group by聯合使用,通常用在聚合函數前面,對分組後的數據進行過濾,(MAX、MIN、COUNT、SUM等)
2.舉個例子:
--統計員工人數大於300的部門?
select
deptName,
count(deptName)
from
user
having
count(deptName) > 300
--統計員工人數大於300並且平均年齡在20到25歲之間的部門
SELECT
deptName,
count(deptName) deptNum,
avg(age) ageAvg
FROM
user
GROUP BY
deptName
HAVING
count(deptName) > 300 AND
avg(age) BETWEEN 20 AND 25
ORDER BY
deptName DESC;
ps:
1、group by能單獨使用,那having能排除group by 單獨使用嗎?
一般情況下是不能單獨使用的。
既然是一般,那肯定有特殊情況了,如下
select 1 from user having count(dept) >= 1;
select 後面 不能是表字段,所以意義不是很大,算是特殊用法吧。
2、having和where都能過濾,那和where的有哪些不同?能和where一起使用嗎?
where後面不能與聚合函數一起使用,所以用having來實現。
having是能和where一起使用的。如下
select xx
from
where --篩選FROM子句中指定的操作所產生的行(分組之前過濾數據)
group by --分組WHERE子句
having --從分組的結果中篩選行(分組之後過濾數據)