MYSQL 获取由另一列指定的组的列中的最低值

MYSQL Get lowest value in column of a group specified by another column

我有一个 table 看起来像这样:

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(),并将其连接到原始 table。 (你说你想要最低和最高,对吧?)

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)

或每年最低 mark

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

您可以这样写查询:

SELECT t1.* from your_table t1
INNER JOIN (
    SELECT yearofstudy, MIN(marks) as marks 
        FROM your_table GROUP BY yearofstudy
    ) t2
    ON t1.yearofstudy = t2.yearofstudy
    AND t1.marks = t2.marks
GROUP BY t1.yearofstudy
ORDER BY t1.yearofstudy, t1.id;

如果 yearofstudy 的所有 MIN 记录都是必需的,那么您可以简单地删除 GROUP BY t1.yearofstudy

Demo