sql - 在不使用连接的情况下为每个组获取 N 个结果
问题描述
我可以在不使用连接的情况下解决这个问题吗?这张表的数据太多了,我想更高效地完成它。我的想法之一是使用group_concat子查询获取ID列表,但它不适用于IN子句。
SELECT * FROM table WHERE id IN (group_concat subquery)
我可以听听你的建议吗?
data
ID SERVER_ID ...
--------------------
1 1 ...
2 1
3 1
4 2
5 2
6 2
7 3
8 3
9 3
10 3
...
expected result with limit 2 per each group:
ID SERVER_ID ...
--------------------
1 1 ...
2 1
4 2
5 2
7 3
8 3
解决方案
您可以尝试以下使用row_number
,此解决方案适用于 postgreSQL、MySQL 8.0、Oracle 和 SQL Server。
select
id,
server_id
from
(
select
id,
server_id,
row_number() over (partition by server_id order by id) as rnk
from yourTable
) val
where rnk <= 2
这是演示。
| id | server_id |
| --- | --------- |
| 1 | 1 |
| 2 | 1 |
| 4 | 2 |
| 5 | 2 |
| 7 | 3 |
| 8 | 3 |
推荐阅读
- spring - UTF-8 中的 Spring WebClient 特殊字符请求
- assembly - 为什么 IMUL 的 32 位立即数会在 NASM 中给出警告而在 GCC 中给出错误?
- samsung-mobile - 日志意外出现
- node.js - ssl 与 post 请求的通信问题
- github - 使用 GitHub Desktop 修改提交
- javascript - How do I require an input into a textbox only if a certain checkbox is selected
- php - 在 WooCommerce 结帐页面上运行特定的过滤器或功能
- python-3.x - tkinter:我如何使滚动条对框架的新大小做出反应
- react-native - 有没有办法在 React native 中单击按钮显示/隐藏功能组件
- bash - 如果两个字符串按长度匹配,则 Bash 比较