我有一个具有相似结构和数据的示例表,如下所示:
+------+---------+-------------+------------+ | S_ID | S_NAME | SUBJECT | MARK_VALUE | +------+---------+-------------+------------+ | 1 | Stud | SUB_1 | 50 | | 2 | Stud | SUB_2 | 60 | | 3 | Stud | SUB_3 | 70 | | 4 | Stud_1 | SUB_1 | 40 | | 5 | Stud_1 | SUB_2 | 50 | | 6 | Stud_2 | SUB_2 | 40 | +------+---------+-------------+------------+
表在每个学生出现的所有科目中都有每个学生的合并标记。
请帮助我,编写一个查询以提取每个学生( 不分学科/其他学生 )获得的MAXIMUM分数,如下所示:
按S_Name和Max(MARK_Value)分组
+------+---------+-------------+------------+ | S_ID | S_NAME | SUBJECT | MAX_MARK | +------+---------+-------------+------------+ | 3 | Stud | SUB_3 | 70 | | 5 | Stud_1 | SUB_2 | 50 | | 6 | Stud_2 | SUB_2 | 40 | +------+---------+-------------+------------+
使用row_number()窗口功能
row_number()
select * from ( select *, row_number()over(partition by s_name order by MARK_VALUE desc) rn from table_name ) t where t.rn=1
或者您可以使用相关的子查询
select t1.* from table_name t1 where t.MARK_VALUE=(select max(MARK_VALUE) from table_name t2 where t2.S_NAME=t1.S_NAME)