首页 > 解决方案 > 如何在 Postgres 中选择 TOP 记录。不是类似的问题

问题描述

我有一个包含三列(City、Orderid、Total_quantity)和超过 500 行的表。我想根据 total_quantity 获取前 50 条记录。我可以用 rank_number 做到这一点,但可以通过一个例子来理解这种扭曲。

示例:考虑到只有 3 个城市,选择前 5 个(仅作为示例)。

Table1
City Orderid Total_quantity
---------------------------
A      1      90
A      2      80
A      3      70     
B      4      70
B      5      65
B      6      55
C      7      79    
C      8      24

'
'
'

如果我选择前 5 名,那么第一条记录应该来自城市 A 的最大总量,第二条记录应该来自城市 B 的最大总量,第三条记录应该来自城市 C 的最大数量。这是扭曲,第四条记录应该来自城市 A 的最大数量,然后最后的第五条记录应该来自城市 B 的最大总量。所以输出会像

输出:

Table1
    City Orderid Total_quantity
    ---------------------------
    A      1      90
    B      4      70
    C      7      79
    A      2      80   
    B      5      65
    '
    '
    '

标签: sqlpostgresqlwindow-functions

解决方案


select City, Orderid, total_quantity,
       rank() OVER (PARTITION BY City ORDER BY total_quantity desc) as rank_quantity
 from table
 order by rank_quantity,city LIMIT 5;

让我知道它是否有效


推荐阅读