【问题标题】:Multiple rows with the same Max value - SQL具有相同最大值的多行 - SQL
【发布时间】:2019-11-22 20:56:06
【问题描述】:

我有两张桌子,CustomerOrders

  • Customer:ID、姓名、电子邮件
  • Orders:Id、OrderDate、Department、Total、Customer_Id

我构建了一个查询来获取每个部门中总数最高的客户:

select 
    Id, Name, dep, max(total_s) totals
from
    (select 
         c.Id, c.Name, o.Department dep, sum(o.Total) total_s
     from 
         Customer c
     join 
         Orders o on c.Id = o.CustomerId
     group by 
         1) sub
group by 3

此查询返回每个部门总和最大的客户,问题是我有一个部门有两个客户(行),他们有相同的 Max Total,但查询只返回一行。那么如何返回所有包含 Max 值的行呢?

【问题讨论】:

  • 请标记您的数据库。 SQL 是一种语言,它不会告诉我们可能的解决方案。

标签: sql postgresql max


【解决方案1】:

你可以使用rank():

select c.Id, c.Name, o.Department, total,
from (select c.Id, c.Name, o.Department, sum(o.Total) as total,
             rank() over (partition by o.Department order by sum(o.Total) desc) as seqnum
      from Customer c join
           Orders o
           on c.Id = o.CustomerId
      group by c.Id, c.Name, o.Department
     ) sub
where seqnum = 1;

说实话,我不确定您的查询对任何事情有什么用处。在几乎任何数据库中,它都会返回一个错误,因为内部查询和外部查询都有 select 列而不是 group by 键。此外,查询从不计算单个部门客户的总数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    相关资源
    最近更新 更多