为何数据分组
当希望得知不同的组中具有的不同数量的某一列内容时,则需要进行对数据的分组~
创建分组
使用 SELECT 语句的 GROUP BY 子句进行创建。
输入▼
#
SELECT id,COUNT(*) AS num_prods
FROM Products
GROUP BY id;
输出▼
+-------+----------+
| id | num_prods|
+-------+----------+
| BRS01 | 3 |
| DLL01 | 4 |
| FNG01 | 2 |
+-------+----------+
过滤分组
由于 WHERE 只能对行进行过滤,而不能对组进行过滤。
因此使用 HAVING 语句~
HAVING 支持所有的 WHERE 操作符
输入▼
# 方法类似上一个,仅仅是对COUNT(*)进行了过滤,v
SELECT id,COUNT(*) AS orders
FROM Orders
GROUP BY id
HAVING COUNT(*) >=2
输出▼
+------------+----------+
| id | orders |
+------------+----------+
| 1000000001 | 2 |
+------------+----------+
WHERE 和 HAVING 区别:
- WHERE 在数据分组前进行过滤
- HAVING 在数据分组后进行过滤
由于 WHERE 排除的行不包括在分组中,这可能会改变计算值进而影响 HAVING 子句中基于这些值过滤掉的分组。