在MySQL上选择每个组的一条记录[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我只想要每个班级的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 greatest-n-per-group
1个回答
0
投票

如果您使用的是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`
© www.soinside.com 2019 - 2024. All rights reserved.