hive指定规则排序的问题

有这样一组数据:
学号 姓名 科目 分数
202212001 张三 数学 79
202212001 张三 语文 79
202212001 张三 英语 60
202212001 张三 化学 79
202212001 张三 历史 60
202212002 李四 数学 80
202212002 李四 语文 88
202212002 李四 英语 79
202212003 王五 数学 89
202212003 王五 语文 89
202212003 王五 历史 90
202212003 王五 化学 90
202212003 王五 数学 79

想要的效果是,学生科目按照分数排序,如果这个学生的个科目分数一样的话,按照 数学>语文>历史>英语 进行排序.

我尝试过用rank()函数进行排序.但是无法达成指定规则进行排序.

请问各位有没有好办法解决这种场景

给题主一个思路,在子查询中新增一个字段,数语历英分别为1、2、3、4,学生科目按分数排序,同时如果成绩相同,按照新增字段的数字大小排序,这样就可以解决题主需求了。

按照楼上大神给的思路,我整理了下sql贴在下面,希望能帮到你们:
"select
uid,
collect_set(concat_ws(",",name,subject,cast(score as string))) as appTop1
from
(select
a.uid,
a.name,
a.subject,
a.score,
a.col_a,
rank() over(partition by a.uid order by score desc,col_a) as rownum
from
(select
uid,
name,
subject,
score,
case when subject='数学' then 1
when app_name='语文' then 2
when app_name='历史' then 3
when app_name='英语' then 4
when app_name='化学' then 5
else 0 end as col_a
from db.student_score) a) m
where m.rownum = 1
group by uid
"
我要实现的是,求每个学生成绩的top1,top3和top5,如果成绩相同,按照指定科目进行排序并合并成一列.后续操作进行join就可以啦