关键词

详解MySQL HAVING:过滤分组

HAVING是MySQL用于在GROUP BY子句之后对数据进行过滤的关键字,HAVING的使用方式与WHERE相似,可以使用诸如SUM、AVG等聚合函数、关系运算符、逻辑运算符等对数据进行筛选。在使用HAVING之前,需要先进行GROUP BY操作,将数据按照一定规则分组。

下面是一些示例说明:

假设有一个订单表orders,包含以下字段:

  • order_id:订单号
  • customer_id:客户ID
  • order_date:订单日期
  • total_amount:订单总金额

1. 按照客户ID分组,统计每个客户的订单总金额是否大于1000元,如果是,则返回该客户的客户ID和订单总金额。

SELECT customer_id, SUM(total_amount) as amount
FROM orders
GROUP BY customer_id
HAVING amount > 1000;

2. 按照订单日期分组,统计每个日期的订单总金额和订单数量,只返回订单总金额大于1000元或者订单数量大于5的结果。

SELECT order_date, SUM(total_amount) as amount, COUNT(*) as cnt
FROM orders
GROUP BY order_date
HAVING amount > 1000 OR cnt > 5;

3. 按照客户ID分组,筛选出订单总金额排名前5的客户信息。

SELECT customer_id, SUM(total_amount) as amount
FROM orders
GROUP BY customer_id
HAVING amount IN (
  SELECT DISTINCT TOP 5 SUM(total_amount)
  FROM orders
  GROUP BY customer_id
  ORDER BY SUM(total_amount) DESC
);

4. 按照客户ID和订单日期分组,筛选出各个客户在某一日期之前的历史订单总金额,只返回历史订单总金额大于1000元的结果。

SELECT customer_id, order_date, SUM(total_amount) as amount
FROM orders
GROUP BY customer_id, order_date
HAVING order_date < '2021-01-01' AND amount > 1000;

总之,HAVING语句是在GROUP BY子句之后进行的过滤操作,它可以对分组后的数据进行聚合计算和筛选,是使用GROUP BY子句的重要组成部分。

本文链接:http://task.lmcjl.com/news/17832.html

展开阅读全文