SQL23 统计每个学校各难度的用户平均刷题数
首先分析题目:
想要计算一些参加了答题的不同学校、不同难度的用户平均答题量
不同学校: group by 学校
不同难度: group by 难度
平均答题量:注意用户去重,还有指定question_id、device_id是那个表的属性,不然会报列属性不明确的错
count(qpd.question_id)/count(distinct qpd.device_id) avg_answer_cnt
** 注意一下题目中的细节:
请你写一个SQL查询,计算不同学校、不同难度的用户平均答题量,根据示例,你的查询应返回以下结果(结果在小数点位数保留4位,4位之后四舍五入):**
所以平均答题代码需要修改:其实不修改也可以运行成功,但是细节可以减少真正开发的bug发生
round(count(qpd.question_id)/count(distinct qpd.device_id),4) avg_answer_cnt
后面就通过左连接查询
select university,difficult_level,
round(count(qpd.question_id)/count(distinct qpd.device_id),4) avg_answer_cnt
from question_practice_detail qpd
left join user_profile up on qpd.device_id=up.device_id
left join question_detail qd on qpd.question_id = qd.question_id
group by university,difficult_level
总结一下:
相对前面的练习这次多使用了round函数
round函数
SQL 中的 ROUND() 函数是用于对数字进行四舍五入的函数,其语法如下:
ROUND(number, decimal_places)
其中,number 表示要进行四舍五入的数字,decimal_places 表示要保留的小数位数。如果 decimal_places 为正数,则表示保留的小数位数;如果 decimal_places 为负数,则表示舍入到小数点左侧的位数。
例如,以下 SQL 查询语句将 2.34567 这个数字四舍五入保留两位小数:
SELECT ROUND(2.34567, 2);
查询结果为:
2.35
需要注意的是,如果 number 的小数位数小于 decimal_places,则结果将补齐为 decimal_places 位,例如:
SELECT ROUND(2.3, 4);
查询结果为:
2.3000
在实际应用中,ROUND() 函数通常用于数据统计、报表生成等场合,可以对数字进行格式化处理,使其更符合人类的阅读习惯。