如何检索 postgresql 中每列的前 3 个结果?

How to retrieve top 3 results for each column in postgresql?

我已经给出了一个问题。
table 看起来像这样..

STATE          | year1 | ... | year 10
AP             | 100   | ... | 120
assam          | 13    | ..  | 42
madhya pradesh | 214   | ... | 421

现在,我需要获得每年的前 3 个州。

我尝试了所有可能的方法。但是,我无法按列过滤结果。

您的设计有问题。枚举列几乎总是糟糕设计的标志。

现在您可以使用 unnest 逆轴旋转,然后使用 window 函数 row_number 获得每年前 3 个州:

with unpivoted as (
    select state,
        unnest(array[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) as year,
        unnest(array[
            year_1, year_2, year_3, 
            year_4, year_5, year_6, 
            year_7, year_8, year_9, 
            year_10
            ]) as value,
    from your_table
    )
select *
from (
    select t.*,
        row_number() over (
            partition by year 
            order by value desc
            ) as seqnum
    from unpivoted t
    ) t 
where seqnum <= 3;

Demo