mysql - 获取 MySQL 中每个组的前 N 行
问题描述
给定一个 MySQL 表的形式
Name | Type
-------+-----
Bill | A
Hill | B
Jill | C
Hans | A
George | C
Sophie | B
Hannah | B
Nancy | C
Phil | A
... | ...
我想生成一个 MySQL 查询,它为我提供N
按类型分组的顶部行。我所说的“顶部”是指给定的排序。在此示例中,它可以是通过按字母顺序(或按日期,如果所有类型参数都是日期)排序类型参数给出的顺序。例如,如果N = 2
,则结果表可能是:
Name | Type
-------+-----
Bill | A
Hill | B
Jill | C
Hans | A
George | C
Sophie | B
... | ...
也就是说,条目很可能在结果表中被分组为它们各自的类型,但它们的重要性并不严格。我运行 MySQL 8.x。
解决方案
如果您想要n
每组的行,请使用row_number()
. 如果您希望它们交错,请使用order by
:
select t.*
from (select t.*,
row_number() over (partition by type order by name) as seqnum
from t
) t
where seqnum <= 2
order by seqnum, type;
这假设“top”按字母顺序排列name
。如果您有其他定义,请将其order by
用于 for row_number()
。
推荐阅读
- java - java - 如何在Java的嵌套循环中只迭代一次for循环?
- mysql - MySQL如何从列值中的mutiplitcaton返回值
- flutter - hydrad_bloc:未处理的异常:对空值使用空检查运算符
- javascript - 如何访问 Shopware 6 店面的 Javascript 中的翻译?
- angular - Angular - 错误:类型“MatPaginator”不满足约束“MatTableDataSourcePaginator”
- flutter - 登录成功后如何禁止返回登录页面?
- c++ - 在二叉树中求平均值的问题
- rust - rust 函数接受闭包作为参数或返回闭包的惯用方式是什么?
- ios - 如何以编程方式向 UIBarButton 添加操作?
- go - 如何从 map[string]interface{} 中提取数据?