【问题标题】:Get highest value using partition in SQL [duplicate]使用 SQL 中的分区获取最高值 [重复]
【发布时间】:2020-02-20 00:11:03
【问题描述】:

我试图获得最高的支出,并显示在该类别中支出最高的供应商。这是我所拥有的:

Vendor    Category   Spend
3M         cat1       200
XX         cat6       150
Bos        cat1       700
JJ         cat0       500
KLM        cat0       100       
XX         cat0       400

这是想要的结果:

Vendor    Category   Spend
XX         cat6       150
Bos        cat1       700
JJ         cat0       500

我没有得到正确的结果

select vendor, category, sum(spend) ,row_number() over(partition by vendor order by spend desc) as roworder
from myTable
group by vendor, category

【问题讨论】:

  • 这个问题已经被问过很多次了。 Gordon 对其中一个被突出显示为重复的答案有一个字面上相同的答案。

标签: sql sql-server tsql


【解决方案1】:

使用相关子查询过滤数据:

select t.*
from myTable t
where t.spend = (select max(t2.spend)
                 from myTable t2
                 where t2.category = t.category
                );

你也可以使用窗口函数:

select t.*
from (select t.*,
             row_number() over (partition by category order by spend desc) as seqnum
      from myTable t
     ) t
where seqnum = 1;

如果您希望在最大值重复的情况下保持平局,请使用 rank()

【讨论】:

  • Gordon,我需要汇总支出,因为有时有多个供应商和类别具有相同的供应商名称和类别但支出不同,所以我需要始终汇总支出
  • 你没有在你的预期结果中“求和”spend,@moe。例如,cat1 的值是 700,而不是 900
  • 这只是一个示例数据,但在我的真实数据中,供应商和类别相同但支出不同。抱歉,我正在尝试简化示例数据
  • 如果您的样本数据不能代表问题@moe,那么您将不会得到有代表性的答案。我建议发布一个新问题(可能删除这个问题),其中包含更多信息的样本集和结果。
猜你喜欢
  • 2021-02-21
  • 2020-02-11
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多