这个问题在这里已有答案:
我只想要每个班级的1个记录,这是最年轻的学生?
select e.`cname`, s.`sname`
from `Nguy3524`.`enrolled` e, `Nguy3524`.`student` s
where e.`snum` = s.`snum`
and e.`snum` in (
Select g1.`snum`
from `Nguy3524`.`grade` g1
where g1.`score` in (select max(g2.`score`)
from `Nguy3524`.`grade` g2 where g1.`cname` = g2.`cname` ))
order by s.`age`
现在它返回带有多个sname的cname,但我只是eacch组的第一个记录。
如果您使用的是MySql 8,则可以使用row_number方法
select * from (
select e.`cname`, s.`sname`,
row_number() over (partition by cname order by age) rn
from `Nguy3524`.`enrolled` e, `Nguy3524`.`student` s
where e.`snum` = s.`snum`
and e.`snum` in (
Select g1.`snum`
from `Nguy3524`.`grade` g1
where g1.`score` in (select max(g2.`score`)
from `Nguy3524`.`grade` g2 where g1.`cname` = g2.`cname` ))
) t
where rn = 1
order by s.`age`