首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取每组分组结果的前n条记录?

如何获取每组分组结果的前n条记录?
EN

Stack Overflow用户
提问于 2018-03-28 07:51:33
回答 2查看 0关注 0票数 0

以下是可能最简单的例子,尽管任何解决方案都应该能够扩展到所需的多个顶级结果:

给出下面这样的表格,包括个人、组和年龄列,你会怎么做?每组中有两个年龄最大的人?(组内的联系不应产生更多的结果,而应按字母顺序给出前2)

代码语言:txt
复制
+--------+-------+-----+
| Person | Group | Age |
+--------+-------+-----+
| Bob    | 1     | 32  |
| Jill   | 1     | 34  |
| Shawn  | 1     | 42  |
| Jake   | 2     | 29  |
| Paul   | 2     | 36  |
| Laura  | 2     | 39  |
+--------+-------+-----+

期望的结果集:

代码语言:txt
复制
+--------+-------+-----+
| Shawn  | 1     | 42  |
| Jill   | 1     | 34  |
| Laura  | 2     | 39  |
| Paul   | 2     | 36  |
+--------+-------+-----+

注:这个问题建立在前一个问题的基础上-获取每组成组SQL结果的最大值记录-从每一组中得到一个顶部行,并获得了一个非常好的MySQL特定的答案:

代码语言:txt
复制
select * 
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`

我很想建立这个基础,虽然我不知道该怎么做。

EN

Stack Overflow用户

发布于 2018-03-28 17:08:27

在其他数据库中,可以使用ROW_NUMBER。MySQL不支持ROW_NUMBER但是你可以使用变量来模拟它:

代码语言:txt
复制
SELECT
    person,
    groupname,
    age
FROM
(
    SELECT
        person,
        groupname,
        age,
        @rn := IF(@prev = groupname, @rn + 1, 1) AS rn,
        @prev := groupname
    FROM mytable
    JOIN (SELECT @prev := NULL, @rn := 0) AS vars
    ORDER BY groupname, age DESC, person
) AS T1
WHERE rn <= 2

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档