sql - 每个不同值中选择 5 个

标签 sql ruby-on-rails postgresql activerecord

我在 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/

相关文章:

sql - 存储内容翻译的有效方法?

ruby-on-rails - ruby on rails,变量后面或前面的冒号

ruby-on-rails - Rails 仅修改 yaml 文件中的特定键

sql - ON DELETE 触发器运行后未删除行

sql - 如何根据 SQL 中的任意每月周期日期范围聚合值?

mysql - 在 MySQL 上执行什么查询可以获得以下内容?

sql - 如何使用任何 Oracle 函数在 Oracle 中选择计数占总数的百分比?

python - 将空日期填充为 NULL sql 查询

ruby-on-rails - 将 ruby​​ 数组转换为整齐的列字符串?

ruby-on-rails - 使用 zeus : Postgres is being accessed by other users 进行 cucumber 和 RSpec 测试