MySQL中的WHERE和HAVING
使用GROUP BY
语句时,有时会同时使用WHERE
和HAVING
,常常会因为搞不清楚要用哪个而写错,这里记录一下
TL;NRs
WEHRE
语句必须在GROUP BY
之前,用于对表中数据进行筛选HAVING
语句必须在GROUP BY
之后,用于对数据分组统计后的结果进行筛选
例子
对如上图所示的表t执行以下语句:
# 语句1
SELECT age, COUNT(*) FROM t
WHERE id > 4
GROUP BY age
HAVING age > 13
;
结果为
而执行语句2:
# 语句2
SELECT age, COUNT(*) FROM t
GROUP BY age
HAVING age > 13
;
结果为
执行语句3:
# 语句3
SELECT age, COUNT(*) FROM t
GROUP BY age
HAVING age > 13
WHERE id > 4
;
则报错