SQL HAVING 子句


SQL HAVING 子句

SQL语言中的HAVING指令是用来过滤GROUP BY来进行分组所得结果中的行的。HAVING子句可以让我们对分组查询的结果进行筛选,筛选的条件是根据组的聚合结果而言。
使用HAVING子句的语法如下:

SELECT 列名, 聚合函数(列名) FROM 表名 GROUP BY 列名 HAVING 聚合函数(列名) 运算符 值;

HAVING子句中的条件是指定在聚合函数上的,任何列的条件可以在WHERE子句中指定。最后筛选完数据,呈现出来的数据是聚合函数运算结果,以及对应结果所涉及的列值。以下是一些关于HAVING子句和GROUP BY子句的例子和解释。

例子1

SELECT *
FROM orders
GROUP BY order_date
HAVING COUNT(order_id) > 2;

在这个查询中,我们将’order_date’列上的值分组。如果该组中’oder_id’的数量大于2,则显示所有结果,否则不显示任何结果。

例子2

SELECT order_date, SUM(order_price)
FROM orders
GROUP BY order_date
HAVING SUM(order_price) > 200;

在这个查询中,我们将’order_date’分组并累加该组中’order_price’列的值。如果 ‘order_price’ 的总和大于200,则显示所有结果,否则不显示任何结果。

例子3

SELECT product_name, COUNT(order_id) as number_of_orders
FROM order_details
JOIN products ON order_details.product_id=products.product_id
GROUP BY product_name
HAVING COUNT(order_id) > 10;

在这个查询中,我们在ORDER_DETAILS表和PRODUCTS表之间进行了联接,并将’product_name’列上的值分组。如果该组中’order_id’列的数量大于10,则显示结果,否则不显示任何结果。

在这三个例子中,我们看到了如何在GROUP BY 获取的结果集上使用HAVING子句来进行结果筛选。在查询中,HAVING子句必须紧随GROUP BY子句使用,因为我们必须先分组,然后才能对聚合函数的结果进行过滤。