SQL 必知必会·笔记<8>分组数据
1. 使用GROUP BY子句创建分组
示例:
SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id;
注意
- GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组。
- 如果分组列中包含具有NULL 值的行,则NULL 将作为一个分组返回。如果列中有多行NULL 值,它们将分为一组。
- GROUP BY 子句必须出现在WHERE 子句之后,ORDER BY 子句之前。
2. 使用HAVING过滤分组
除了能用GROUP BY 分组数据外,SQL 还允许过滤分组,规定包括哪些 分组,排除哪些分组
示例:
SELECT cust_id, COUNT(*) AS orders FROM Orders GROUP BY cust_id HAVING COUNT(*) >= 2;
说明:HAVING 和WHERE 的差别
WHERE 在数据分组前进行过滤,HAVING 在数 据分组后进行过滤。这是一个重要的区别,WHERE 排除的行不包括在 分组中。这可能会改变计算值,从而影响HAVING 子句中基于这些值 过滤掉的分组。
3. 分组和排序
提示:不要忘记ORDER BY
一般在使用GROUP BY 子句时,应该也给出ORDER BY 子句。这是保 证数据正确排序的唯一方法。千万不要仅依赖GROUP BY 排序数据。
4. SELECT 子句顺序