s q l sql sql 中,使用 GROUP BY 子句对数据进行分组。分组通常与聚合函数一起使用,以对每个组内的数据执行聚合操作;
e . g . e.g. e.g. 按照客户分组,计算每个客户的订单总金额;
SELECT customer_id, SUM(order_amount) AS total_amount
FROM Orders
GROUP BY customer_id;
-- 结果如下:
customer_id total_amount
----------- ------------
BRS01 2314.2
DLL01 41233
FNG02 991.32
SUM() 函数的值将是每个“组”的金额总值,而不是整个数据库中的总金额;实现分组过滤使用的关键词是 HAVING;
HAVING 关键词的作用与 WHERE 关键词的作用一样,只不过 WHERE 作用于行,HAVING 作用于组。
e . g . e.g. e.g. 过滤出 Orders 表中 ≥ 2 个订单的顾客信息;
SELECT cust_id, COUNT(*) AS order_num
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
注意: 不要理解为有了 HAVING 不能有 WHERE,两者可以共存;e . g . e.g. e.g. 过滤出过去 12 个月内 ≥ 2 个订单的顾客信息;
SELECT cust_id, COUNT(*) AS order_num
FROM Orders
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 12 MONTH)
GROUP BY cust_id
HAVING COUNT(*) >= 2;
本节内容增添了两个 SQL 子句,关于子句的顺序需要注意;
| 子句 | 说明 | 是否必须使用 |
|---|---|---|
| SELECT | 要返回的列和表达式 | 是 |
| FROM | 表名 | 是 |
| WHERE | 过滤(行) | 否 |
| GROUP BY | 分组 | 否 |
| HAVING | 过滤(组) | 否 |
| ORDER BY | 排序 | 否 |
–
以上