第一步把grade表的score按照岗位分组并降序排序,即---注:此时的窗口函数的排序用的是并列且连续的dense_rank,因为结果示例的java的显示有提示。
(select id,language_id,score,
dense_rank() over(partition by language_id order by score desc) as r
from grade) as g
第二步把language的id和上述结果的language_id,进行右链接,并用where筛选出分数为前二的结果,并且select显示出id、name和score即
select g.id,l.name,g.score
from
language as l
right join
第一步结果
on l.id=g.language_id
where g.r=1 or g.r=2
第三步,对以上所得结果,按照l.name进行生序排序,即完整结果
select g.id,l.name,g.score
from
language as l
right join
(select id,language_id,score,
dense_rank() over(partition by language_id order by score desc) as r
from grade) as g
on l.id=g.language_id
where g.r=1 or g.r=2
order by l.name