HAVING 子句用于在 SQL 查询中对分组后的结果进行筛选。它通常与 GROUP BY 一起使用,允许在分组后对结果进行过滤。
基本语法如下:
SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2
HAVING condition;
GROUP BY 和聚合函数:
GROUP BY用于将结果集按照指定列进行分组。- 聚合函数(例如
COUNT、SUM、AVG等)通常与SELECT语句一起使用,对每个分组的数据执行计算。
HAVING 子句:
HAVING子句允许在GROUP BY分组后对结果集进行筛选。- 它类似于
WHERE子句,但WHERE用于对行进行筛选,而HAVING用于对分组后的结果进行筛选。 - 可以使用聚合函数和列名来定义条件,条件通常涉及对分组后的聚合结果进行比较。
假设有一张表 orders 包含客户ID (customer_id) 和订单总金额 (total_amount),我们想找到订单总金额超过1000的客户,并且这些客户有至少两个订单。
SELECT customer_id, COUNT(*) as order_count, SUM(total_amount) as total_spent
FROM orders
GROUP BY customer_id
HAVING COUNT(*) >= 2 AND SUM(total_amount) > 1000;
这个查询首先按客户ID分组订单记录,然后使用 HAVING 子句筛选出满足以下条件的客户:
COUNT(*) >= 2:客户有至少两个订单。SUM(total_amount) > 1000:客户的订单总金额超过1000。