题解 | #对试卷得分做min-max归一化#

对试卷得分做min-max归一化

http://www.nowcoder.com/practice/2b7acdc7d1b9435bac377c1dcb3085d6

问题:请你将用户作答高难度试卷的得分在每份试卷作答记录内执行min-max归一化后缩放到[0,100]区间,并输出用户ID、试卷ID、归一化后分数平均值;最后按照试卷ID升序、归一化分数降序输出。(注:得分区间默认为[0,100],如果某个试卷作答记录中只有一个得分,那么无需使用公式,归一化并缩放后分数仍为原分数)

这道题的核心问题在与这句话:“如果某个试卷作答记录中只有一个得分,那么无需使用公式”,所以需要使用一个if语句来进行条件判定的功能

问题拆解:1.先根据exam_id分组找出每一组的score最大值m1和最小值m2

2.将步骤1生成的新表格和原始表格exam_record链接,提取exam_id和uid,然后根据这两个字段分组,按照题目给的公式简单计算一下

3.步骤2的外层需要嵌套if函数,例如果exam_id 9001中的uid 1001的用户只有一条数据score为100,不嵌套if函数则分母max(100)-min(100)为0,生成null值,实际上只有一条记录时就不用再进行公式计算了。

4.最后加上group by 和order by即可。

以上。

SELECT uid, er.exam_id, ROUND(AVG(IF(m1=m2, m1, 
		100*(score-m2)/(m1-m2)))) avg_new_score 
FROM exam_record er 
JOIN
	(SELECT exam_id, max(score) m1, min(score) m2 FROM exam_record 
	WHERE exam_id IN 
    			(SELECT exam_id FROM examination_info 
                WHERE difficulty ='hard')
	GROUP BY exam_id) r1 
 ON er.exam_id=r1.exam_id
 WHERE score IS NOT NULL
 GROUP BY er.exam_id, uid 
 ORDER BY er.exam_id, avg_new_score DESC
全部评论

相关推荐

秋国🐮🐴:拿到你简历编号然后让你知道世间险恶
点赞 评论 收藏
分享
02-22 18:38
门头沟学院 Java
程序员牛肉:标准的NPC简历,一个短链接+12306。你可以在牛客上面搜一搜有多少人的简历和你一样。你自己能不能给出你一个理由让面试官在大家简历高度相同的情况下,选择约面你而不是对应的211,985学生? 是因为你即将拥有的那段小厂实习吗?这种小厂实习真的很有含金量吗?因此你可以找实习,但是你如果只能找到小厂实习的话,其实意义不太大。 但你的时间是充足的,相信我:从现在到今年的九月份大三上你就干两个事情:"写博客"+“参加开源之夏”。这两个搞好了不亚于一段大厂实习的含金量。 想要让自己变得更强,首先就是不要把自己当打工人看待,让自己简历上面的活人气息更多一点,不要让自己成为流水线的产物。你不是在出售你的技能,你是在利用你的技能和公司达成一种合作关系。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务