我怎样才能为每个外键
问题描述:
考虑下面的表中的最小值:我怎样才能为每个外键
student discipline mark
------- ---------- ----
1 math 5
1 phylosophy 4
1 literature 3
2 math 2
2 phylosophy 5
2 literature 5
什么是让每一个学生的最小标记的最佳方式? (结果应该是[3,2])
答
使用MIN
函数。
SELECT student, MIN(mark)
FROM result_table
GROUP BY student
如果你需要他们得到了最低分的,你可以做以下纪律:
SELECT result_table.*
FROM result_table
JOIN (SELECT student, MIN(mark) as min_mark
FROM result_table
GROUP BY student) lowest_result ON result_table.student = lowest_result.student
AND result_table.mark = lowest_result.min_mark
这将显示的结果,其中学生有最低点。请注意,如果学生在多个科目中具有相同的最低分数,则这将返回两行。为避免这种情况,您可以在学科周围添加另一个MIN
,并在学生和商标上添加GROUP BY
。
答
如果您需要将该规则作为输出的一部分,则以下操作可能比使用子选择稍快(因为只需对表进行一次扫描就可以),但它可能只会显示较大的表。
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的第一声明是要走的路。