题解 | #0级用户高难度试卷的平均用时和平均得分#

0级用户高难度试卷的平均用时和平均得分

http://www.nowcoder.com/practice/bb474c6cbd77478fb6d9fc86934d0ebb

解题关键在于对空值的处理上。
对空值的处理有两种方法
#方法1:coalesce(A,B),如果A为空则返回B,不为空则返回A
#方法2:IF(A IS NULL ,B,C)如果A为空则返回B,不为空则返回C
完整代码
SELECT uid,
	ROUND(AVG(score_new),0) avg_score,
	ROUND(AVG(cost_time),1)	avg_time_took
FROM (SELECT a.uid,start_time,
	COALESCE(score,0) score_new, #方法1:coalesce(A,B),如果A为空则返回B,不为空则返回A
    IF (submit_time IS NULL,b.duration,TIMESTAMPDIFF(minute,start_time,submit_time)) cost_time #IF(A IS NULL ,B,C)如果A为空则返回B,不为空则返回C
	FROM exam_record a
	LEFT JOIN examination_info b ON a.exam_id=b.exam_id
	LEFT JOIN user_info c ON a.uid=c.uid
	WHERE difficulty='hard'
	AND level='0')t1
    
GROUP BY uid
SQL解题集 文章被收录于专栏

这是牛客SQL相关的解题集

全部评论
用ifnull可以吗?
点赞 回复 分享
发布于 2023-11-29 10:51 广东
好的,我改好啦,谢谢小姐姐。刚学MySQL就关注你啦,每次看题解都发现你写的最好最详细了,每次都会特意找你的答案看看,收获很大
点赞 回复 分享
发布于 2022-04-19 21:17
这边coalesce(a,b)的用法算是狭义上的理解了
点赞 回复 分享
发布于 2022-04-19 16:50
select uid,round(avg(score),0) avg_score,round(avg(timedelta),1) avg_time_took from user_info u_i left join ( select uid,exam_id,if(submit_time is null,60,minute(timediff(start_time,submit_time))) timedelta, if(score is null,0,score) score from exam_record e_r left join examination_info e_i using(exam_id) where difficulty='hard' )t1 using(uid) where level=0 group by uid; 请问这样为啥不行呀
点赞 回复 分享
发布于 2022-04-14 10:02

相关推荐

鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
评论
10
2
分享

创作者周榜

更多
牛客网
牛客企业服务