首页 > 其他 > 详细

having子句用法

时间:2020-11-07 19:40:20      阅读:31      评论:0      收藏:0      [点我收藏+]

Having 基础用法

集合结果指定条件

注释:having子句中能够使用三种要素:常数、聚合函数、group by 语句中指定的列名(聚合健);

用having就一定要用group by,用group by 不一定要用having,他只是筛选条件用的。

示例:
商品品种分组后结果中筛选出数据行数为2行的数据:
SELECT product_type, COUNT(*) FROM Product  GROUP BY product_type HAVING COUNT(*) = 2;

平均数,销售价格大于2500的
SELECT product_type, AVG(sale_price) FROM Product GROUP BY product_type HAVING AVG(sale_price) >= 2500;

查询部门人数大于1的部门
SELECT dept,COUNT(user_name) count_tmp FROM ec_uses GROUP BY dept HAVING count_tmp>1;

现在需要统计平均分大于90的学生的姓名,以及对应的平均分,按照平均分降序排列。
select student.name,avg(score) as aver from score left join student on student.id=score.sid group by sid having aver>=90 order by aver desc;

 

相对于HAVING子句,更适合写再Where子句中的条件:

  • where子句 = 指定行所对应的条件
  • having子句 = 指定组所对应的条件

聚合建所对应的条件不应该书写在HAVING子句中,而应书写在WHERE子句当中。虽执行结果一样,但将条件写在where子句中比写在having子句中的处理速度更快,返回结果时间更短。
原因:聚合操作时,DBMS内部会进行排序处理,where在排序之前就对数据进行过滤,having是在排序之后在对数据进行分组

-- 先过滤后分组
SELECT product_type, COUNT(*) FROM Product GROUP BY product_type HAVING product_type = 衣服;

-- 先分组后过滤(性能差点)
SELECT product_type, COUNT(*) FROM Product WHERE product_type = 衣服 GROUP BY product_type;

 

having子句用法

原文:https://www.cnblogs.com/caiyongjiesmile/p/13940780.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!