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

标签 mysql sql greatest-n-per-group

我有一个看起来像这样的表:

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() 函数,但我还没有成功,非常感谢您的帮助。

最佳答案

使用子查询获取每个 yearofstudymin()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/

相关文章:

mysql - "2013 - Lost connection to MySQL server during query"但不是超时且不是大数据包

从上周开始的不同时间段的 MySQL 用户事件

mysql - SQL (Mysql) NOT IN 与 OR 组合,结果错误

mysql - 将 SQL 更新语句转换为 View 语句

sql - 如何更有效地执行查询,返回一个 ID 在其他两个表中出现的次数?

Mysql DISTINCT account_id 和 ORDER BY

php - MySQL中如何将数据从一张表复制到另一张表?

mysql - 为什么索引添加在这里的解释语句中没有任何改变?

mysql通过时间戳获取最新记录而无需子查询

mysql - 使用 GROUP BY 时获取 desc 或最后插入的数据