Вы можете использовать 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