1.为什么使用分组函数
分组函数是对数据行的集合进行操作并按组给出一个结果,此结果可直接输出,也可用来做判断条件。
分组时可能是整个表分为一组,也可能根据条件分为多组
2.语法
SELECT [COLUMN,]group_function(COLUMN) FROM 表名 [WHERE 条件] [GROUP BY COLUMN] [HAVING group_function(COLUMN)expression] [ORDER BY column|group_function(COLUMN)expression]; |
-GROUP BY:指定要分组的列,可以多列,在group by子句内出现的列可以在select子句内不出现,但是在select子句使用分组函 数,其子句内出现的列在group by子句内必须出现
-HAVING:限制组(记录已经分组、使用过组函数、与having子句匹配的结果才输出),其他正常的限制条件还是在WHERE子句里写
WHERE子句是写分组前的限制条件
HAVING子句写分组后的限制条件
3.常用的分组函数
- MIN([DISTINCT|ALL] COLUMN|EXPRESSION):返回最小值
- MAX([DISTINCT|ALL] COLUMN|EXPRESSION):返回最大值
MIN和MAX可用于任何数据类型
- SUM(([DISTINCT|ALL] COLUMN|EXPRESSION):总和
- AVG([DISTINCT|ALL] COLUMN|EXPRESSION):平均值
SUM和AVG只能是数值类型和表达式
- COUNT([DISTINCT|ALL] COLUMN|EXPRESSION):计数,满足条件的非空记录数
COUNT(*):计数,满足条件记录数
注:
1.除了COUNT(*)之外,其他分组函数会忽略包含有空值的记录再计算
使用NVL函数强制分组函数包含有空值的记录
2.select子句中是要使用了组函数,任何不在组函数中的列或表达式都必须包含在GROUP BY子句中
4.组函数嵌套
只能嵌套两层