【问题标题】:in sql how to get the max of sum that is group by two columns在sql中如何获得由两列分组的总和的最大值
【发布时间】:2020-08-12 18:01:18
【问题描述】:
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行:

【问题讨论】:

  • 请提供样本数据、预期结果以及您所说的“利润”。
  • 我添加了数据和表格,我只为一个县添加了一列
  • 请将示例数据添加为formatted text - 不是图片。将预期结果也包含为格式化文本

标签: sql postgresql group-by max greatest-n-per-group


【解决方案1】:

您可以使用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

【讨论】:

  • 完美的工作,有什么方法可以按利润订购,当我尝试按利润订购时,它说表达式必须与初始顺序匹配
  • @Wangdu:不是distinct on,但有其他选择。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 2012-09-09
相关资源
最近更新 更多