如何在postgres中找到具有相同列的列的最大值和值?

How to find maximum and value of column with the same column in postgres?

我想在特定 province 中找到 has_sold 列的最大值。例如,在所有具有 province = Tehran 的行中,哪一行具有最多 has_sold 值? 这是我的 table:

CREATE TABLE fp_stores_data_test (
    time INTEGER,
    province VARCHAR(20),
    city VARCHAR(20),
    market_id INTEGER,
    product_id INTEGER,
    price INTEGER, 
    quantity INTEGER,
    has_sold INTEGER,
    PRIMARY KEY (time, city, province, market_id ,product_id)
);

我试过这个SELECT DISTINCT city, max(has_sold) FROM fp_stores_data_test GROUP BY city,但我不确定它是否正确。

您可以使用 row_number()

尝试以下方法
select * from
(
select *, row_number() over(partition by province order by has_sold desc) as rn
from fp_stores_data_test
)A where rn=1 

在 Postgres 中,我会推荐 distinct on 来解决这个最大的每组 n 问题。它通常比其他替代方案更有效。

select distinct on (province) f.*
from fp_stores_data_test f
order by province, has_sold desc

对于每个 province,这会为您提供具有最大 has_sold 的行。如果有平局,则无论如何只返回一行(您可以添加另一个排序标准来打破平局并使结果具有确定性)。

如果您想要允许潜在的顶级关系,请改用 rank()

select *
from (
    select f.*, rank() over(partition by province order by has_sold desc) rn
    from fp_stores_data_test f
) f
where rn = 1