题解42 | 两种方法rollup/union |个人笔记
每个学校的平均年龄和平均绩点及整体情况
https://www.nowcoder.com/practice/d686ac1d09d94441be91475843797d2d
1、rollup
WITH ROLLUP:在group分组字段的基础上再进行统计数据。
GROUP BY 后面可以跟单个或多个列名,表示以单列或多列作为分组依据, 然后再跟with rollup,表示在进行分组统计的基础上再次进行汇总统计(在每个分组下都会有统计汇总)
以哪一列为分组依据,在汇总字段中,该字段为null
可以配合空值函数使用:
IFNULL(expr1,expr2) --如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。
COALESCE(expr1,expr2) -- 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。
select COALESCE(university,'总体') university, avg(age) avg_age, avg(gpa) avg_gpa from user_profile group by university with rollup order by university in ('总体') desc, university asc
2 union
分组查询出平均年龄和平均gpa,再使用union单独加入一行总计
select '总体' university, avg(age) avg_age, avg(gpa) avg_gpa from user_profile union select university, avg(age) avg_age, avg(gpa) avg_gpa from user_profile group by university order by university in ('总体') desc, university asc
题目中保留3位小数可以使用 四舍五入函数 :round(x,y)
round函数对x值进行四舍五入,精确到小数点后y位。
SQL解题笔记 文章被收录于专栏
记录解题过程中遇到的问题、出现的错误以及掌握不牢固的知识点