如果您需要将纪律作为输出的一部分,则以下内容可能比使用子选择稍快(因为只需要对表进行一次扫描),但它可能仅适用于较大的表。
select student,
discipline,
mark as lowest_mark
from (
select student,
discipline,
mark,
row_number() over (partition by student order by mark) as rn
from the_table
) t
where rn = 1
它总是会为每个学生返回一行。如果有两个学科具有相同的分数,则没有定义将采取哪一个学科。
如果您确实希望在最低标记多次出现时返回多行,则可以使用以下命令:
select student,
discipline,
mark as lowest_mark
from (
select student,
discipline,
mark,
min(mark) over (partition by student) as min_mark
from the_table
) t
where mark = min_mark
如果你不需要纪律,而只需要最低分,那么 GavinCattell 的第一句话就是要走的路。