group by rollup和 group by cube区别

一、分组依据为一列时

1、使用group by分组查询

select exam_no,avg (result) as 平均分 from result_info 
group by exam_no 

查询结果如下: 

group by rollup和 group by cube区别

2、使用group by rollup 和group by cube的结果

select exam_no,avg(result) as 平均分 from result_info 
group by rollup(exam_no) 
select exam_no,avg(result) as 平均分 from result_info 
group by cube(exam_no) 

这两个的查询结果都是一样的:

group by rollup和 group by cube区别

这时候就是比使用group by 多了一个计算所有数据的平均分

二、分组依据为2列时

1、使用group by分组查询

select exam_no,course_name,avg (result) as 平均分 from result_info 
group by exam_no,course_Name

查询结果如下:

group by rollup和 group by cube区别

将根据考试编号和课程名称2列进行分组

2、使用group by rollup分组查询:

select exam_no,course_name,avg (result) as 平均分 from result_info 
group by rollup(exam_no,course_Name)

 查询结果如下:

group by rollup和 group by cube区别

比使用group by多的计算:

① 分别计算了考试编号不同的平均值——蓝色框

② 计算所有数据的平均值——红色框

3、使用group by cube查询 

select exam_no,course_name,avg (result) as 平均分 from result_info 
group by cube(exam_no,course_Name)  

查询结果如下: 

group by rollup和 group by cube区别

比使用group by多的计算:

① 分别计算课程名称不同的平均值——蓝色框

② 分别计算了考试编号不同的平均值——黑色框

③ 计算了总数据的平均值——红色框

比使用group by rollup多的计算:

① 分别计算课程名称不同的平均值——蓝色框