WHERE在数据分组前进行过滤,HAVING在数据分组后过滤。

HAVING可以对检索(或计算)出的结果过滤,WHERE则不行。

WHERE、聚合函数、HAVING在from后面的执行顺序:WHERE>聚合函数(sum,min,max,avg,count)>HAVING

 

表orders的数据如下:

+-----------+---------------------+---------+
| order_num | order_date | cust_id |
+-----------+---------------------+---------+
| 20005 | 2005-09-01 00:00:00 | 10001 |
| 20006 | 2005-09-12 00:00:00 | 10003 |
| 20007 | 2005-09-30 00:00:00 | 10004 |
| 20008 | 2005-10-03 00:00:00 | 10005 |
| 20009 | 2005-10-08 00:00:00 | 10001 |
+-----------+---------------------+---------+

计算每个cust_id的订单数,且返回订单数>=2的cust_id,这里只能使用HAVING

 

mysql> SELECT cust_id, COUNT(*) AS nums
         -> FROM orders
         -> group by cust_id
         -> HAVING COUNT(*) >= 2;
+---------+------+
| cust_id | nums |
+---------+------+
| 10001 | 2 |
+---------+------+

 

 

 

where首先排除了不符合要求的行,在此基础上可以分组、计算, 而后having可以进一步筛选前面得到的结果。

相关文章:

  • 2022-02-20
  • 2022-02-25
  • 2021-06-15
  • 2022-12-23
  • 2022-12-23
  • 2021-09-15
  • 2022-12-23
  • 2021-10-07
猜你喜欢
  • 2021-09-24
  • 2022-02-03
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案