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

  • 相关阅读:
    线程间的通信 与 线程池
    线程同步
    静态代理模式
    多线程状态
    线程、进程、多线程
    Java面向对象之泛型
    ConstraintLayout 用法
    搞NDK开发
    Linux基础命令【记录】
    c# 的一些基本操作或属性
  • 原文地址:https://www.cnblogs.com/Uni-Hoang/p/13235212.html
Copyright © 2011-2022 走看看