#从输出结果来看,需考虑并列第一的情况,并且依然存在第二名。确定排序函数为dense_rank
#整体思路:
#1.创建一个中间表,包含需要输出的除了name以外的字段以及分数的组内排名;
#2.关联语言表查语言名称
#3.用where筛出组内排名等于1或2的记录
#4.各种排序。
select t1.id
        ,l.name
        ,t1.score
from 
(select id,language_id,score
         ,(dense_rank()over(partition by language_id order by score desc))as s_rank
from grade)t1
join language l on t1.language_id=l.id
where t1.s_rank<=2
order by l.name,t1.score desc,t1.id;
一句口诀掌握排序函数row_number、rank、dense_rank的用法:
row_number 不存在并列
dense_rank 和rank存在并列,但rank很跳。
【任意门】https://blog.nowcoder.net/n/e5252c9afc7846e885d9307e4f6575de