zoukankan      html  css  js  c++  java
  • 一文让你彻底理解having和where的区别

    having子句与where都是设定条件筛选的语句,有相似之处也有区别。

    having与where的区别:

    having是在分组后对数据进行过滤

    where是在分组前对数据进行过滤

    having后面可以使用聚合函数

    where后面不可以使用聚合

    在查询过程中执行顺序:from>where>group(含聚合)>having>order>select。

    聚合语句(sum,min,max,avg,count)要比having子句优先执行,所有having后面可以使用聚合函数。而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count),所有where条件中不能使用聚合函数。

    select sum(num) as rmb from order where id>10;
    //先查询出id大于10的数据,再执行聚合语句sum(num)

    //执行以下语句会报错,因为where子句先于sum(num)执行,执行where子句的时候还没有sum(num),所以会报错。
    select sum(num) as rmb from order where sum(num)>10;

    对分组数据再次判断时要用having
    select reports,count(*) from employees group by reports having count(*) > 4;
    //首先查询了select reports,count() from employees group by reports,在此基础上查找count() > 4的数据。

    聚合函数:
    例如SUM, COUNT, MAX, AVG等,这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

    HAVING子句可以让我们直接筛选成组后的各组数据,也可以在聚合后对组记录进行筛选,而WHERE子句在聚合前先筛选记录,也就是说作用在GROUP BY 子句和HAVING子句前。

    ————————————————
    版权声明:本文为CSDN博主「ryan007liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/ryan007liu/article/details/91441479

  • 相关阅读:
    (转)-为什么分布式一定要有Redis?
    (九)redis使用lua脚本
    (八)redis实现分布式锁
    (七)面试题-Redis比较常见的面试题-转载
    (六)redis缓存穿透,击穿,雪崩以及解决方案
    (五)redis的主从复制
    (四)redis的数据持久化-RDB,AOF
    (三)redis的其他功能-Bitmap,HyperLogLog,GEO
    JsTracker
    Web开发者助手 FeHelper
  • 原文地址:https://www.cnblogs.com/Uni-Hoang/p/13235212.html
Copyright © 2011-2022 走看看