-- 1.统计各用户关于不同tag得分的最高最低分,注意去掉重复值
with t as (
SELECT
DISTINCT(er.uid),
ei.tag,
max( score ) over ( PARTITION BY uid,tag ) AS max_score,
min( score ) over ( PARTITION BY uid,tag ) AS min_score
FROM
exam_record er
LEFT JOIN examination_info ei ON er.exam_id = ei.exam_id
)
SELECT
DISTINCT(er.uid),
ei.tag,
max( score ) over ( PARTITION BY uid,tag ) AS max_score,
min( score ) over ( PARTITION BY uid,tag ) AS min_score
FROM
exam_record er
LEFT JOIN examination_info ei ON er.exam_id = ei.exam_id
)
--3.利用排序情况,拿到各tag前3名
SELECT * from (
--2.统计各tag得分排序,并按照 最高分、最低分、uid降序
select tag,
uid,
row_number() over(PARTITION by tag ORDER BY max_score desc,min_score desc,uid DESC) ranking
from t ) p
where ranking <=3
select tag,
uid,
row_number() over(PARTITION by tag ORDER BY max_score desc,min_score desc,uid DESC) ranking
from t ) p
where ranking <=3