268题解 | #考试分数(三)#

考试分数(三)

https://www.nowcoder.com/practice/b83f8b0e7e934d95a56c24f047260d91

首先先写出应该筛选的语句,并且把2个表联立起来:
1
2
select g1.id, l.name, g1.score
from grade g1 join language l on g1.language_id=l.id 
然后考虑应该怎么输出,一般来说,你无法获得一个表里面数据的排名,除非使用函数或者使用select 连接自己的表去比较,不懂的可以先去看一下 https://blog.nowcoder.net/n/07c24f0c8b7f4f058013f3707ef58f3b
这里考虑的不使用函数,使用select连接自己来解决,于是可以写出如下sql语句来获取当前分数在当前岗位的排名了:
1
2
3
select count(distinct g2.score) 
    from grade g2 
    where g2.score>=g1.score and g1.language_id=g2.language_id
这样要注意的是,第一,由于可能第1或者第2同分的情况,并列输出,所以要用
1
 g2.score>=g1.score
然后要是同岗位比较,所以要使用
1
g1.language_id=g2.language_id
不然比较的就是所有岗位的所有分数的排名了。
然后就是先按名字升序,按分数降序,按id降序,如下:
1
 order by l.name,g1.score desc ,g1.id
最后联立sql如下:
1
2
3
4
5
6
7
8
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;
全部评论

相关推荐

04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务