我有一个看起来像这样的表:
id name yearofstudy mark
1 Alain A 2 75
2 Michael B 3 85
3 Chen C 1 55
4 Caroline D 2 60
5 Mohamed E 2 60
6 Alex F 1 55
7 Sofia O 3 78
8 Samir O 1 85
9 Rob G 2 78
10 Big K 3 55
我正在尝试获取每年最低(和最高)分数的学生的 ID、姓名、年份和分数,这将给出:
id name yearofstudy mark
3 Chen C 1 55
4 Caroline D 2 60
10 Big K 3 55
SQL 不是我的强项,我一直在尝试使用 MIN() 函数,但我还没有成功,非常感谢您的帮助。
最佳答案
使用子查询获取每个 yearofstudy
的 min()
和 max()
,并将其连接到原始表。 (你确实说过你想要最低和最高,对吧?)
select t.id, t.name, t.yearofstudy, t.mark
from t
inner join (
select
yearofstudy
, min(mark) as minMark
, max(mar) as maxMark
from t
group by yearofstudy
) as m
on t.yearofstudy = m.yearofstudy
and (t.mark = minMark or t.mark = maxMark)
或者仅针对每年的最低标记
:
select t.id, t.name, t.yearofstudy, t.mark
from t
inner join (
select
yearofstudy
, min(mark) as minMark
from t
group by yearofstudy
) as m
on t.yearofstudy = m.yearofstudy
and t.mark = minMark
关于MYSQL 获取由另一列指定的组的列中的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42797222/