в sql как получить максимум суммы, сгруппированной по двум столбцам - PullRequest
0 голосов
/ 28 апреля 2020
SELECT county, category_name, SUM(bottle_qty*(btl_price-state_btl_cost)) AS profit
FROM sales
GROUP BY county, category_name
ORDER BY profit DESC

Я хочу получить прибыль для каждого округа, и какое имя категории дает наибольшую прибыль в этом округе.

Поэтому я просто хочу, чтобы первая строка, 8-я строка и 11-я строка:

So I just want the first row, 8th row and 11throw

1 Ответ

0 голосов
/ 28 апреля 2020

Вы можете использовать distinct on, чтобы решить эту проблему с наибольшим числом групп:

SELECT DISTINCT ON(county)
    county, 
    category_name,
    SUM(bottle_qty*(btl_price-state_btl_cost)) AS profit 
FROM sales 
GROUP BY county, category_name 
ORDER BY county, profit DESC

Однако это не позволяет вам управлять порядком строк в наборе результатов. В этом случае используйте row_number() вместо:

SELECT *
FROM (
    SELECT
        county, 
        category_name,
        SUM(bottle_qty*(btl_price-state_btl_cost)) AS profit 
        ROW_NUMBER() OVER(
            PARTITION BY county 
            ORDER BY SUM(bottle_qty*(btl_price-state_btl_cost)) DESC
        ) rn
    FROM sales 
    GROUP BY county, category_name 
) t
WHERE rn = 1
ORDER BY profit
...