SQL基础:SQLSERVER 中having的语法用处用法详解

1. HAVING的作用

HAVING是用于对分组后的结果集进行过滤的,与WHERE的作用类似。但WHERE用于单子句中,HAVING则必须在GROUP BY语句之后使用。通过HAVING语句,可以对分组后的结果进行筛选,只输出符合条件的组。

2. HAVING语法

HAVING的语法格式如下:

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

HAVING aggregate_function(column_name) operator value;

其中,aggregate_function为聚合函数,column_name为要聚合的列,operator为操作符,value为要比较的值。

2.1 HAVING示例

以下示例中,我们从orders表中按照customer_id进行分组,筛选出花费大于1000的用户:

SELECT customer_id, SUM(cost)

FROM orders

GROUP BY customer_id

HAVING SUM(cost) > 1000;

以上SQL语句的执行结果将只会包含花费大于1000的用户。

3. HAVING使用注意事项

3.1 WHERE和HAVING的区别

WHERE用于过滤原始数据,而HAVING用于过滤分组后的结果。因此,WHERE可以用于任何查询,而HAVING只能用于列有聚合函数的查询。

3.2 HAVING与ORDER BY的关系

在含有HAVING的SQL查询中,ORDER BY一般位于HAVING语句之后。当GROUP BY与HAVING一起使用时,ORDER BY也必须在它们之后。

3.3 HAVING与DISTINCT的关系

DISTINCT并不会影响HAVING子句中的结果。如果希望HAVING作用在DISTINCT后的结果之上,则需要将DISTINCT的结果作为一个内部表,然后在外部查找符合条件的行。

4. HAVING的使用实例

以下示例中,我们将使用Northwind数据库上的employees表。

4.1 按照城市进行分组,求出每个城市的员工数量

SELECT city, COUNT(*)

FROM employees

GROUP BY city;

4.2 按照城市进行分组,仅显示员工数量大于1的城市

SELECT city, COUNT(*)

FROM employees

GROUP BY city

HAVING COUNT(*) > 1;

4.3 按照城市和性别进行分组,求出每个城市不同性别的员工数量

SELECT city, gender, COUNT(*)

FROM employees

GROUP BY city, gender;

4.4 按照城市和性别进行分组,仅显示员工数量大于1的城市和性别

SELECT city, gender, COUNT(*)

FROM employees

GROUP BY city, gender

HAVING COUNT(*) > 1;

4.5 按照城市和性别进行分组,求出每个城市不同性别的平均薪资

SELECT city, gender, AVG(salary)

FROM employees

GROUP BY city, gender;

4.6 按照城市和性别进行分组,仅显示平均薪资大于5000的城市和性别

SELECT city, gender, AVG(salary)

FROM employees

GROUP BY city, gender

HAVING AVG(salary) > 5000;

5. 总结

HAVING语句用于对分组后的结果进行过滤,可以对分组后的结果进行筛选,只输出符合条件的组。在使用HAVING时,需要注意HAVING仅能用于列有聚合函数的查询,并且ORDER BY必须在HAVING之后,DISTINCT不会影响HAVING子句中的结果。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签