精华内容
下载资源
问答
  • HAVING子句

    千次阅读 2019-05-30 19:56:37
    HAVING子句是对分组统计函数统计出的结果进行过滤的子句。 基本语法: demo:查询出平均工资高于2000的职位的名称和平均工资。 demo:查询出非销售人员的工作名称以及从事同一工作的雇员的月工资之和,并且要求从事...

    HAVING子句是对分组统计函数统计出的结果进行过滤的子句。
    基本语法:
    在这里插入图片描述
    demo:查询出平均工资高于2000的职位的名称和平均工资。
    在这里插入图片描述
    demo:查询出非销售人员的工作名称以及从事同一工作的雇员的月工资之和,并且要求从事同一工作的雇员工资合计大于5000,按照雇员的薪资之和升序排列。
    在这里插入图片描述
    WHERE子句和HAVING子句的区别:
    *WHERE子句在GROUP BY子句之前执行,不能在WHERE子句中使用统计函数;
    *HAVING子句在GROUP BY子句之后执行,可以在HAVING子句中对统计函数进行过滤。

    展开全文
  • 主要给大家介绍了关于SQL中where子句与having子句的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 零:为什么需要【Having子句】 引入【Having子句】纯属无奈。 因为,【GROUPBY子句】确实很强大,但是有些条件查询仅仅靠【GROUPBY子句】并不能满足要求; 如: 注:(1)在数据库的高级查询三这篇文章中有...

    这篇博客写的太啰嗦,究其原因还是理解的不到位,以后理解深入之后,回头简化吧。 

    ● Having子句要和GROUP BY子句联合起来才能使用;Having子句不能单独使用。

    ● WHERE子句和Having子句功能是相同的,都是做数据筛选的;【普通条件】的判断建议放在WHERE子句中,【聚合函数和其他的数据】的条件判断需要放在Having子句中;

    ● 在Having子句中,拿聚合函数跟具体的数据做比较是没有问题的,比如“HAVING COUNT(*)>=2;”是没有问题的;但是,拿聚合函数跟某个字段作条件判断是不行的,这个必须用表连接才能实现;表连接的内容在后面会介绍;  

    目录

    零:为什么需要【Having子句】

    一:Having子句的一个例子:初体验

    二:Having子句:基本内容

    (1)基本内容

    (2)一个容易出错的地方:

    三:Having子句的特殊用法:


    零:为什么需要【Having子句】

    引入【Having子句】纯属无奈。(具体,Having子句的作用,以后用着用着就能更好的理解了吧…

    因为,【GROUP BY子句】确实很强大,但是有些查询业务,仅仅靠【GROUP BY子句】并不能满足要求;

    如:

    注:(1)在数据库的高级查询三这篇文章中有各个子句的执行顺序说明;

           (2)聚合函数不能放在WHERE子句中!!!聚合函数的使用之前,需要先明确无误的确定数据的范围;在WHERE中使用聚合函数是万万不能的,这在逻辑上就说不通,MySQL自然也不支持这样做!!!


    一:Having子句的一个例子:初体验

    通过下面这个例子,感觉having子句或许可以看成是一个分组后,再筛选一次的操作。

    例子:查询部门平均底薪超过2000的部门:

    SELECT deptno
    FROM t_emp
    GROUP BY deptno HAVING AVG(sal)>=2000;

    前面提到过,聚合函数写在了SELECT子句中的,这是因为,SELECT子句的执行顺序是在WHERE子句之后的,WHERE子句执行完了之后,基本的数据范围就确定了,自然可以使用聚合函数;

    经过这个例子之后,可以发现,聚合函数并不一定非得写在SELECT子句中;;;只要WHERE子句执行完了之后,后续执行的子句中都可以使用聚合函数;;;;(目前来看,这种理解大概率是没有问题的,在逻辑上也可以理解。。。) 

    话句话说:(假设下面的子句都有的话),执行顺序是【FROM】【WHERE】【GROUP BY】→【SELECT】【ORDER BY】→【LIMIT】::黑色的部分是没有必要使用聚合函数的;红色的部分是不能使用聚合函数的;绿色的部分可以使用聚合函数,只是【GROUP BY】在使用聚合函数的时候,需要结合Having子句!!!


    二:Having子句:基本内容

    (1)基本内容

    ● Having子句的作用和WHERE子句差不多,都是用来做条件筛选的;

    ● 只是Having子句需要写在GROPY BY子句的后面;

    ● GROPY BY 子句执行完毕之后,才会轮到Having子句去执行;自然Having子句的执行顺序是在WHERRE子句之后的,所以在Having子句中可以使用聚合函数做条件判断。

    如下面的例子,【WHERE子句】是做普通条件判断的,即WHERE子句是作淳朴的判断的,如下面1982年之后入职的这个就是个简单的判断;具体点说,WHERE的在判断的主要目的是:基于原表获取“最初的结果集”;【Having子句】是做聚合函数和其他数据做条件判断的;换句话说Having子句的的筛选是:【WHERE已经获取了“最初的结果集”,然后GROUP BY对“最初的结果集”做了分组处理,然后having子句再上场,做进一步筛选】;

    即一句关键的话:【普通条件】的判断放在了WHERE子句中,【聚合函数和其他的数据】的条件判断放在了Having子句中了!!!

    …………………………………………………………………………………………

    (2)一个容易出错的地方:

    还需要注意一个特别容易出错的点!!!:

              在Having子句中,拿聚合函数跟具体的数据做比较是没有问题的,比如“HAVING COUNT(*)>=2;”是没有问题的;

              但是,拿聚合函数跟某个字段作条件判断是不行的,这个必须用表连接才能实现;  

    AND子句也可以用在Having子句中哎。


    三:Having子句的特殊用法:

     

     

     

    展开全文
  • MySQL having子句

    2021-01-18 20:32:32
    在本教程中,您将学习如何使用MySQL HAVING子句为行分组或聚合组指定过滤条件。MySQL HAVING子句简介在SELECT语句中使用HAVING子句来指定一组行或聚合的过滤条件。HAVING子句通常与GROUP BY子句一起使用,以根据指定...

    在本教程中,您将学习如何使用MySQL HAVING子句为行分组或聚合组指定过滤条件。

    MySQL HAVING子句简介

    在SELECT语句中使用HAVING子句来指定一组行或聚合的过滤条件。

    HAVING子句通常与GROUP BY子句一起使用,以根据指定的条件过滤分组。如果省略GROUP BY子句,则HAVING子句的行为与WHERE子句类似。

    请注意,HAVING子句将过滤条件应用于每组分行,而WHERE子句将过滤条件应用于每个单独的行。

    MySQL HAVING子句示例

    让我们举一些使用HAVING子句的例子来看看它是如何工作。 我们将使用示例数据库(yiibaidb)中的orderdetails表进行演示。

    f74bf00bc45e8223ecd5ef83cc4b46ed.png

    mysql> desc orderdetails;

    +-----------------+---------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +-----------------+---------------+------+-----+---------+-------+

    | orderNumber | int(11) | NO | PRI | NULL | |

    | productCode | varchar(15) | NO | PRI | NULL | |

    | quantityOrdered | int(11) | NO | | NULL | |

    | priceEach | decimal(10,2) | NO | | NULL | |

    | orderLineNumber | smallint(6) | NO | | NULL | |

    +-----------------+---------------+------+-----+---------+-------+

    5 rows in set

    可以使用GROUP BY子句来获取订单号,查看每个订单销售的商品数量和每个销售总额:

    SELECT

    ordernumber,

    SUM(quantityOrdered) AS itemsCount,

    SUM(priceeach*quantityOrdered) AS total

    FROM

    orderdetails

    GROUP BY ordernumber;

    执行上面查询语句,得到以下结果(部分) -

    +-------------+------------+----------+

    | ordernumber | itemsCount | total |

    +-------------+------------+----------+

    | 10100 | 151 | 10223.83 |

    | 10101 | 142 | 10549.01 |

    | 10102 | 80 | 5494.78 |

    | 10103 | 541 | 50218.95 |

    | 10104 | 443 | 40206.20 |

    | 10105 | 545 | 53959.21 |

    | 10106 | 675 | 52151.81 |

    | ------- 这里省略了一大波数据 ---------|

    | ........ ........... |

    | 10421 | 75 | 7639.10 |

    | 10422 | 76 | 5849.44 |

    | 10423 | 111 | 8597.73 |

    | 10424 | 269 | 29310.30 |

    | 10425 | 427 | 41623.44 |

    +-------------+------------+----------+

    326 rows in set

    现在,可以通过使用HAVING子句查询(过滤)哪些订单的总销售额大于55000,如下所示:

    SELECT

    ordernumber,

    SUM(quantityOrdered) AS itemsCount,

    SUM(priceeach*quantityOrdered) AS total

    FROM

    orderdetails

    GROUP BY ordernumber

    HAVING total > 55000;

    执行上面查询语句,得到以下结果 -

    +-------------+------------+----------+

    | ordernumber | itemsCount | total |

    +-------------+------------+----------+

    | 10126 | 617 | 57131.92 |

    | 10127 | 540 | 58841.35 |

    | 10135 | 607 | 55601.84 |

    | 10142 | 577 | 56052.56 |

    | 10165 | 670 | 67392.85 |

    | 10181 | 522 | 55069.55 |

    | 10192 | 585 | 55425.77 |

    | 10204 | 619 | 58793.53 |

    | 10207 | 615 | 59265.14 |

    | 10212 | 612 | 59830.55 |

    | 10222 | 717 | 56822.65 |

    | 10287 | 595 | 61402.00 |

    | 10310 | 619 | 61234.67 |

    | 10312 | 601 | 55639.66 |

    | 10390 | 603 | 55902.50 |

    +-------------+------------+----------+

    可以使用逻辑运算符(如OR和AND)在HAVING子句中构造复杂过滤条件。 假设您想查找哪些订单的总销售额大于50000,并且包含超过600个项目,则可以使用以下查询:

    SELECT

    ordernumber,

    SUM(quantityOrdered) AS itemsCount,

    SUM(priceeach*quantityOrdered) AS total

    FROM

    orderdetails

    GROUP BY ordernumber

    HAVING total > 50000 AND itemsCount > 600;

    执行上面查询语句,得到以下结果 -

    +-------------+------------+----------+

    | ordernumber | itemsCount | total |

    +-------------+------------+----------+

    | 10106 | 675 | 52151.81 |

    | 10126 | 617 | 57131.92 |

    | 10135 | 607 | 55601.84 |

    | 10165 | 670 | 67392.85 |

    | 10168 | 642 | 50743.65 |

    | 10204 | 619 | 58793.53 |

    | 10207 | 615 | 59265.14 |

    | 10212 | 612 | 59830.55 |

    | 10222 | 717 | 56822.65 |

    | 10310 | 619 | 61234.67 |

    | 10312 | 601 | 55639.66 |

    | 10360 | 620 | 52166.00 |

    | 10390 | 603 | 55902.50 |

    | 10414 | 609 | 50806.85 |

    +-------------+------------+----------+

    假设您想查找所有已发货(status='Shiped')的订单和总销售额大于55000的订单,可以使用INNER JOIN子句将orders表与orderdetails表一起使用,并在status列和总金额(total)列上应用条件,如以下查询所示:

    SELECT

    a.ordernumber, status, SUM(priceeach*quantityOrdered) total

    FROM

    orderdetails a

    INNER JOIN

    orders b ON b.ordernumber = a.ordernumber

    GROUP BY ordernumber, status

    HAVING status = 'Shipped' AND total > 5000;

    执行上面查询,得到以下结果 -

    +-------------+---------+----------+

    | ordernumber | status | total |

    +-------------+---------+----------+

    | 10126 | Shipped | 57131.92 |

    | 10127 | Shipped | 58841.35 |

    | 10135 | Shipped | 55601.84 |

    | 10142 | Shipped | 56052.56 |

    | 10165 | Shipped | 67392.85 |

    | 10181 | Shipped | 55069.55 |

    | 10192 | Shipped | 55425.77 |

    | 10204 | Shipped | 58793.53 |

    | 10207 | Shipped | 59265.14 |

    | 10212 | Shipped | 59830.55 |

    | 10222 | Shipped | 56822.65 |

    | 10287 | Shipped | 61402.00 |

    | 10310 | Shipped | 61234.67 |

    | 10312 | Shipped | 55639.66 |

    | 10390 | Shipped | 55902.50 |

    +-------------+---------+----------+

    HAVING子句仅在使用GROUP BY子句生成高级报告的输出时才有用。 例如,您可以使用HAVING子句来回答统计问题,例如在本月,本季度或今年总销售额超过10000的订单。

    在本教程中,您已经学习了如何使用具有GROUP BY子句的MySQL HAVING子句为行分组或聚合分组指定过滤器条件。

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • mysql having子句学习

    2021-02-07 01:14:22
    在用到having子句的地方,出现最多的往往是sql的聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。示例:SELECT SUM(population) FROM bbc返回总人口数。通过使用...

    在用到having子句的地方,出现最多的往往是sql的聚合函数,例如SUM, COUNT, MAX, AVG等。

    这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

    示例:

    SELECT SUM(population) FROM bbc

    返回总人口数。

    通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。

    当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值。

    也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。

    HAVING子句可以让我们筛选成组后的各组数据。

    WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前。

    而 HAVING子句在聚合后对组记录进行筛选。

    举二个例子,帮助大家熟悉having的用法。

    一、显示每个地区的总人口数和总面积.

    SELECT region, SUM(population), SUM(area)

    FROM bbc

    GROUP BY region

    先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中

    的不同字段(一或多条记录)作运算。

    二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

    SELECT region, SUM(population), SUM(area)

    FROM bbc

    GROUP BY region

    HAVING SUM(area)>1000000

    此处不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

    HAVING子句可以筛选成组后的各组数据。

    展开全文
  • having子句与where子句

    千次阅读 2020-10-11 20:10:50
    1.相同点 都是对记录进行筛选 2.不同点 ...where子句:where子句仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选,where子句中允许使用比较运算符和逻辑运算
  • PostgreSQL HAVING 子句

    2020-12-16 16:27:03
    PostgreSQL HAVING 子句 HAVING 子句可以让我们筛选分组后的各组数据。 WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。 语法 下面是 HAVING 子句在 SELECT 查询中的位置...
  • having 子句

    2018-03-13 14:59:10
    /*having和where有四点不同 ①having只能用于group by(分组统计语句中) ②where是用于在初始表中筛选查询,having用于在group by分组结果中查询 ③having可以使用聚合函数,而where不能 ④分组的名字必须是查询的...
  • Having子句用法

    2019-06-12 17:54:00
    注:HAVING子句中能够使用三种要素:常数,聚合函数,GROUP BY子句中指定的列名(聚合建) HAVING子句: 用having就一定要和group by连用, 用group by不一有having(它只是一个筛选条件用的) 商品品种分组后结果中...
  • where子句和having子句区别

    千次阅读 2019-11-13 16:58:31
    感谢大佬:... where子句和having子句的区别:     1.where  不能放在group by后面     2.having   是跟group by连在一起用的,放在group by 后面,此时的作用相当于wh...
  • Having子句和Where子句

    千次阅读 2019-05-14 14:45:10
    where 子句和having子句中的区别(此文章为借鉴的总结) 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,...
  • WHERE和HAVING子句有什么区别?

    千次阅读 2019-09-12 10:27:00
    HAVING子句 结合两者:WHERE和HAVING 在本文中学习何时使用WHERE和HAVING。两者都执行类似的功能,但用于不同的目的! 本文的所有示例都基于Microsoft SQL Server Management Studio和AdventureWorks2012数据库。...
  • 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点...
  • having 子句和 where 子句均用于过滤数据,两者的区别在于:where 子句对结果集进行过滤筛选,而 having 子句则对分组的结果进行筛选。 例:统计公交公司为非“通恒公司”的最长线路里程大于 24 的分组信息,按最长...
  • 主要介绍了在oracle中where 子句和having子句中的区别,本文通过sql语句给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了实例详解Group by和Having子句的相关资料,需要的朋友可以参考下
  • SQL中HAVING子句的用法

    千次阅读 2019-09-21 11:41:05
    having子句使用的原因:是因为where子句无法与聚合函数(sum,count...)在一起使用 having子句主要用来筛选分组,与group by在一起使用 where子句在分组前过滤,having在分组后过滤,两者可以同时在一个句子里使用...
  • 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点就是...
  • MySQL HAVING子句

    2019-09-19 19:04:38
    在本教程中,我们将学习如何使用MySQLHAVING子句来指定行分组或聚合的过滤条件。 MySQL HAVING子句 MySQL的HAVING子句在SELECT语句中是用来为某一组行或聚合指定过滤条件。 MySQL的HAVING子句通常与GROUPBY子句...
  • having子句详解&执行顺序

    千次阅读 2017-11-07 11:09:31
    having子句详解&执行顺序
  • having子句必须和group by一起使用,不能单独使用 有了having语句,我们就可以拿聚合函数作为判断条件了,在where语句里面我们不能写聚合语句作为判断条件 ...
  • oracle中的having子句

    2019-12-27 16:38:53
    oracle中的having子句 having子句 having子句和group by一起使用,紧跟在group by的后边,having子句可以使用结果集中的列,也可以使用聚合函数(max、min、count、sum、svg)。having的作用是对分组后的结果进行过滤...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,888
精华内容 28,755
关键字:

having子句

友情链接: interferences.zip