使用postgres排名功能限制n个顶级结果

时间:2013-08-06 20:53:38

标签: sql postgresql greatest-n-per-group window-functions

我正在查询具有ap文档列表的应付帐款表 其中每个(我和其他领域)我感兴趣的是在以下方面运行聚合查询:

  

vendor_id,金额和日期。

我想在这个表上构建查询到我将获得的位置,按年份排序,前10名供应商按总数(金额总和)排序。

请有人告诉我如何使用等级功能。

1 个答案:

答案 0 :(得分:7)

select *
from (
    select the_year, vendor_id, amount,
        row_number() over(
            partition by the_year
            order by amount desc
        ) as rn
    from (
        select
            date_trunc('year', the_date) as the_year,
            vendor_id,
            sum(amount) as amount
        from ap
        group by 1, 2
    ) s
) s
where rn <= 10
order by the_year, amount desc