SQL HAVING子句

1年前 (2024-04-27)
SQL HAVING 子句通常与 GROUP BY 子句一起使用,用来过滤 GROUP BY 子句返回的分组结果集。

GROUP BY 子句通常和聚函数(COUNT()、SUM()、AVG()、MIN()、MAX() 等)一起使用来对结果进行分组,而 WHERE 子句不能和聚函数一起使用,所以 SQL 又提供了 HAVING 子句,以弥补了 WHERE 子句的不足。

WHERE 子句在分组操作之前起作用,HAVING 子句在分组操作之后起作用。

语法

HAVING 子句的基本语法如下:

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]

ORDER BY column1, column2

和 WHERE 子句一样,HAVING 子句后面也跟筛选条件,只有满足条件的数据才会被返回。您可以在 condition 条件中使用 >、<、= 等比较运算符,或者使用 AND、OR 等逻辑运算符来指定多个条件,或者使用 LIKE、NOT LIKE 等进行模糊匹配。

另外需要注意各个语句出现的顺序:

  • WHERE 子句对表进行次筛选,它紧跟 FROM 之后;

  • GROUP BY 子句对 WHERE 的筛选结果进行分组,它必须位于 WHERE 之后;

  • HAVING 子句用来对分组的结果进行筛选,它必须位于 GROUP BY 子句之后;

  • ORDER BY 子句对最终的结果集进行排序,它位于整个 SQL 语句的。

示例

有包含如下记录的 user 表:

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

| id | username | password | email | cellphone | ip |

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

| 1 | mozhiyan | 123456 | java@biancheng网站站点" rel="nofollow" />

SQL> SELECT ip, COUNT( username ) AS total FROM user GROUP BY ip HAVING total >=2;

执行结果:

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

| ip | total |

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

| 101.37.97.51 | 2 |

| 113.96.109.117 | 2 |

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