您当前的位置: 首页 >  sql

Dream丶Killer

暂无认证

  • 7浏览

    0关注

    188博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SQL练习74:考试分数(三)

Dream丶Killer 发布时间:2021-02-15 16:40:26 ,浏览量:7

SQL练习74:考试分数(三)

题目链接:牛客网

题目描述 牛客每次举办企业笔试的时候,企业一般都会有不同的语言岗位,比如C++工程师,JAVA工程师,Python工程师,每个用户笔试完有不同的分数,现在有一个分数(grade)表简化如下: 在这里插入图片描述 第1行表示用户id为1的选择了language_id为1岗位的最后考试完的分数为12000, … 第7行表示用户id为7的选择了language_id为2岗位的最后考试完的分数为11000,

不同的语言岗位(language)表简化如下: 在这里插入图片描述 请你找出每个岗位分数排名前2的用户,得到的结果先按照language的name升序排序,再按照积分降序排序,最后按照grade的id升序排序,得到结果如下: 在这里插入图片描述

解法 根据题目的要求可以使用dense_rank()窗口函数,按照language_id进行分区,score降序排列,再将grade表与language表连接,获取name值。

SELECT g.id, name, score, dense_rank() over(partition by language_id ORDER BY score DESC) s_rank
FROM grade g JOIN language l
ON g.language_id = l.id
idnamescores_rank2C++1300011C++1200026C++1100033JAVA1100017JAVA1100014JAVA1000025Python110001

2.有了上面的结果集,直接按照题目的要求查询排名前二的数据,再按照name升序排列即可。

SELECT id, name, score
FROM (SELECT g.id, name, score, 
	  dense_rank() over(partition by language_id ORDER BY score DESC) s_rank
      FROM grade g JOIN language l
      ON g.language_id = l.id) r1
WHERE r1.s_rank             
关注
打赏
1655344294
查看更多评论
0.2005s