二者都是过滤条件, WHERE运行在分组前,不能和任何聚合函数组合使用,这也是有HAVING的原因;
HAVING是运行在分组后,只能用作聚合函数的过滤
eg:
显示每个地区以及该地区国家总人口数不少于10000000的国家总数????
SELECT region , COUNT(population) cp
FROM bbc WHERE population >= 10000000 GROUP BY region;
-- 列出人口总数不少于100000000的地区
SELECT region ,SUM(population) sp
FROM bbc GROUP BY region HAVING sp>=100000000;
简单来说就是:
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
附:SQL的执行顺序
第一步: 执行FROM
第二步: WHERE条件过滤
第三步: GROUP BY 分组
第四步: 执行SELECT投影列
第五步:HAVING条件过滤
第六步: 执行ORDER BY 排序
附 :COUNT()函数 和SUM()函数在什么时候用
COUNT()函数是用来统计行数的;
SUM()函数是用来求具体某一列的数据和
附:CASE WHEN THEN 语句
eg:
-- 插入两列 a 为加了两列的临时表
SELECT a.*,(CASE WHEN s_class = 'T120' THEN '学霸'
WHEN s_class = 'T121' THEN '学渣'
ELSE '普通'
END
)'印象',
(CASE WHEN s_sex = '女' THEN '美女'
WHEN s_sex = '男' THEN '帅哥'
END
) '颜值'
FROM t_student a;