题解 | #考试分数(五)#

考试分数(五)

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

#中位数(题目四的答案)

SELECT job,
ROUND(CASE  WHEN num % 2 = 1 THEN (num + 1) / 2 ELSE num / 2 END,0) "start" ,
ROUND(CASE  WHEN num % 2 = 1 THEN (num + 1) / 2 ELSE num / 2 + 1 END,0) "end"
FROM (SELECT job, COUNT(job) num FROM grade GROUP BY job) t
ORDER BY job

alt

#排名(题目二的答案)

SELECT id, job, score,
dense_rank() over(PARTITION BY job ORDER BY score DESC) "t_rank"
FROM grade

alt

#两表结合,左外连接 排名 left join 中位数

SELECT tr.id, tr.job, tr.score, tr.t_rank
FROM (SELECT id, job, score,
	dense_rank() over(PARTITION BY job ORDER BY score DESC) "t_rank"
	FROM grade) tr 
	LEFT JOIN 
	(SELECT job,
	ROUND(CASE  WHEN num % 2 = 1 THEN (num + 1) / 2 ELSE num / 2 END,0) "start" ,
	ROUND(CASE  WHEN num % 2 = 1 THEN (num + 1) / 2 ELSE num / 2 + 1 END,0) "end"
	FROM (SELECT job, COUNT(job) num FROM grade GROUP BY job) t
	ORDER BY job) tz
	ON tr.job = tz.job
WHERE tr.t_rank = tz.start OR tr.t_rank = tz.end
ORDER BY id

alt

全部评论
你的思路好清晰,感谢!!看到你的截图才懂
点赞 回复 分享
发布于 2022-09-09 11:48 上海

相关推荐

评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务