Как найти максимум и значение столбца с таким же столбцом в postgres? - PullRequest
1 голос
/ 13 июля 2020

Я хочу найти максимальное значение столбца has_sold в указанном c province. Например, во всех строках с province = Tehran какая строка имеет наибольшее has_sold значение? Это моя таблица:

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, но не уверен, что это правильно.

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

В Postgres я бы рекомендовал distinct on для решения этой проблемы с наибольшим числом n на группу. Обычно это более эффективно, чем другие альтернативы.

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

Для каждого province это дает вам строку с наибольшим has_sold. Если есть связи, в любом случае возвращается только одна строка (вы можете добавить другой критерий сортировки, чтобы разорвать связи и сделать результат детерминированным c).

Если вы хотите разрешить потенциальные верхние связи, используйте 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
1 голос
/ 13 июля 2020

Вы можете попробовать следующее, используя 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 
...