SQL136每类试卷得分前3名

tag:窗口函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1、窗口函数的执行顺序是在group by之后的,所以他是对最后的结果进行再计算。
# 2、在有聚合的情况下,其中max(score)返回的是确定的值,且类似形成新的表,按聚合方式进行计算。如果 order by score 不聚合,因为mysql的计算逻辑,在groupby下是不确定会返回分组内的哪个值。平常的窗口函数并不与groupby同时出现,但是一旦出现,orderby中就需要跟聚合内容。

select
*
from
(select
tag as tid,
uid,
row_number() over(partition by tag order by max(score) desc,min(score) desc,uid desc ) as ranking
from examination_info ex join exam_record er
on ex.exam_id=er.exam_id
group by tag,uid)
table1
where ranking<=3 ;