sql - 在sql中如何获得由两列分组的总和的最大值
问题描述
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
我想要每个县的利润,以及哪个 category_name 会在该县产生最大的利润。
所以我只想要第一行,第8行和第11行:
解决方案
您可以使用distinct on
来解决这个每组最大 n 的问题:
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
推荐阅读
- extjs - Sencha ExtJS 将一列切成两半
- facebook - 连接用户数为 0 的应用程序的 Facebook 速率限制是多少?
- java - 如何实现一个以点击次数为值的番石榴缓存?
- vhdl - 无条件 WAIT 语句对 VHDL 中进程的影响
- reactjs - @uppy/react 将 ModalDashboard 重构为功能组件时无效的道具类型
- swagger - 如何链接到 Swagger 中的另一个端点
- python - Matplotlib 图仅在第二个文件运行后显示
- git - 如何防止 Git 对象被垃圾收集?
- c++ - 计算给定总和的对
- mysql - 优化用于在两个表之间查找匹配的 MySQL 查询