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
我有一个 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