SQL中 WHERE和HAVING的区别




二者都是过滤条件, 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;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值