分组数据
使用分组可将数据分为多个逻辑组,对每个组进行聚集计算。
创建分组
- 分组使用SELECT 语句的GROUP BY 子句建立
SELECT column_name,COUNT(*) AS column_num
FROM table_name
GROUP BY column_name;
- GROUP BY 子句可包含任意数目的列,因而可对分组进行嵌套,更细致地进行数据分组
- 若果在GROUP BY 子句中嵌套了分组,数据将在最后指定的分组上进行汇总
- GROUP BY 子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT 中使用表达式,则必须在GROUP BY 子句中指定相同的表达式,不能使用别名。
- 大多数SQL实现不允许GROUP BY 列带有长度可变的数据类型(如文本或备注型字段)
- 出聚集计算语句外,SELECT 语句中的每一列都必须在GROUP BY 子句中给出
- 如果分组列中包含NULL 值的行,则NULL将作为一个分组返回,如果列中有多行NULL 值,它们将分为一组
过滤分组
SELECT column_name,COUNT(*) AS column_num
FROM table_name
WHERE column_name = 'str'
GROUP BY column_name
HAVING COUNT(*) >= 2;
- WHERE 过滤行;HAVING 过滤分组
- WHERE 在数据分组前进行过滤;HAVING 在数据分组后进行过滤
- 在SELECT指定的字段要么就要包含在GROUP BY语句的后面作为分组的依据;要么就要被包含在聚合函数中。
分组和排序
ORDER BY | GROUP BY |
---|---|
对产生的输出排序 | 对行分组,但输出可能不是分组的排序 |
任意列都可以使用(甚至非选择的列也可以使用 | 只可能使用选择列或表达式列,而且必须使用每个选择列表达式 |
不一定需要 | 如果与聚集函数一起使用列(或表达式)则必须使用 |
- 不要依赖GROUP BY 排序数据
网友评论