我在 PostgreSQL 中有下表:
| a | b | c | =================== | 'w' | 2 | 3 | | 'w' | 7 | 2 | | 'w' | 8 | 1 | | 'w' | 3 | 6 | | 'w' | 0 | 8 | | 'w' | 2 | 9 | | 'w' | 2 | 9 | | 'z' | 4 | 9 | | 'z' | 0 | 9 | | 'z' | 0 | 8 | | 'z' | 3 | 6 | | 'z' | 2 | 7 | | 'z' | 3 | 1 | | 'z' | 3 | 2 | | 'z' | 3 | 3 |
我想选择所有记录,但将 a
列中每个不同值限制为 5 条记录。
所以结果看起来像:
| a | b | c | =================== | 'w' | 2 | 3 | | 'w' | 7 | 2 | | 'w' | 8 | 1 | | 'w' | 3 | 6 | | 'w' | 0 | 8 | | 'z' | 4 | 9 | | 'z' | 0 | 9 | | 'z' | 0 | 8 | | 'z' | 3 | 6 | | 'z' | 2 | 7 |
在 RoR 中实现这一目标的最有效方法是什么?谢谢!
最佳答案
您可以使用row_number ,但你必须指定顺序,否则你将得到不可预测的结果
with cte as (
select
*,
row_number() over(partition by a order by b, c) as row_num
from table1
)
select a, b, c
from cte
where row_num <= 5
关于sql - 每个不同值中选择 5 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231744/