SQL HAVING子句
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 |
+----------------+-------+