在SQL语句中允许使用group by子句将查询结果按照一个或多个字段进行分组,字段值相同的为一组,对每个组进行聚合计算,实现数据的分组汇总。
group by子句指定多个字段分组时,多个字段之间没有先后顺序,用逗号隔开即可,所有字段取值都完全一样会被分为一组。如果分组字段中包含有null值,则null值所在的行会单独分为一组。
分组后每个组内通常包含多条记录,需要对每个组内的多条记录进行聚合运算,而select子句中只能出现分组字段和聚合字段。
语法格式:
select <字段名列表> from <表名> [where <查询条件>] group by <字段名列表>;
对维度进行聚合本质是将原始数据中取值相同的多行值汇总为一行值的过程,对度量进行聚合本质是将原始数据中相同维度值对应的多个度量值按照运算规则计算为一个值的过程,可以使用sum、avg、count、max、min函数对数值型字段进行聚合运算,使用max、min和count函数对日期时间型字段进行聚合运算。
函数名 |
描述 |
sum() |
对一个数值字段求和 |
avg() |
对一个数值字段求平均值 |
max() |
对一个数值或日期时间字段求最大值 |
min() |
对一个数值或日期时间字段求最小值 |
count() |
对一个或多个字段计数 |
示例:
#查询每个学生的平均成绩
select s_id,avg(score)
from sc
group by s_id;