首页 > 解决方案 > 具有相同最大值的多行 - SQL

问题描述

我有两张桌子,CustomerOrders

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

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 值的行呢?

标签: sqlpostgresqlmax

解决方案


您可以使用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键的列。此外,查询从不计算单个部门内客户的总数。


推荐阅读