HAVING的用法以及与WHERE的区别
在 SQL 中,HAVING
子句通常与 GROUP BY
子句一起使用,用于对聚合函数的结果进行过滤。这与 WHERE
子句类似,但 WHERE
子句在聚合之前对单个行进行过滤,而 HAVING
子句在聚合之后对聚合结果进行过滤。
以下是 HAVING
的基本用法:
1. 基本语法:
SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
2. 示例:
假设我们有一个名为 orders
的表,其中包含以下列:order_id
, customer_id
, amount
。
如果我们想知道总订单金额超过 100 的客户数量,我们可以使用以下查询:
SELECT customer_id, SUM(amount) as total_amount
FROM orders
GROUP BY customer_id
HAVING total_amount > 100;
在上面的查询中,我们首先按 customer_id
对订单进行分组,并计算每个客户的总金额。然后,我们使用 HAVING
子句过滤出总金额超过 100 的客户。
3. 与 WHERE 子句的区别:
当使用聚合函数(如 SUM、COUNT 等)时,通常在 WHERE
子句中无法直接使用这些函数,因为 WHERE
在聚合之前执行。相反,你可以在 HAVING
子句中使用这些函数。
4. 注意事项:
当与 GROUP BY
一起使用时,HAVING
语句通常放在 WHERE
语句之后。
虽然可以在没有 GROUP BY
的查询中使用 HAVING
,但这样做通常没有意义,因为 HAVING
在没有分组的情况下没有太多意义。