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

考试分数(五)

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

MySQL: 不使用rank() over()

我们结合考试分数四可以得出各个岗位分数的中位数位置范围,那么按照题意我们只需要求出这个中数范围上的grade信息即可。

中位数范围:

select job, floor((count(job) + 1)/2) as start, ceiling((count(job) + 1)/2) as end
from grade
group by job
order by job

那么如何求出这个中位数范围对应的grade信息呢,我们在考试分数三已经求得了各个岗位的分数排名情况,那我们只需要保证分数排名在中位数范围内即可。

分数排名代码:

select g1.id, l.name, g1.score
from grade g1 join language l on g1.language_id=l.id 
where 
(
    select count(distinct g2.score) 
    from grade g2 
    where g2.score>=g1.score and g1.language_id=g2.language_id
) <=2 order by l.name,g1.score desc ,g1.id;

联立两个查询得出最终的题解:

select B.* from
(SELECT job,FLOOR((COUNT(*)+1)/2) AS `start`, CEILING((count(job) + 1) / 2) AS `end` 
FROM grade  GROUP BY job) A

JOIN

(select g1.*, (
    select count(distinct g2.score) 
    from grade g2 
    where g2.score>=g1.score and g1.job=g2.job) as t_rank
from grade g1 ) B

on (A.job=B.job  and B.t_rank between A.start and A.end)
order by B.id
SQL练习 文章被收录于专栏

已完成牛客的SQL练习。接下来是算法的练习

全部评论

相关推荐

点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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