具有相同最大值的多行-SQL

我有两个表CustomerOrders

  • Customer:ID,名称,电子邮件
  • Orders:编号,订单日期,部门,总计,客户编号

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

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

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

jasonzhyh 回答:具有相同最大值的多行-SQL

您可以使用rank()

select c.Id,c.Name,o.Department,total,from (select c.Id,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,o.Department
     ) sub
where seqnum = 1;

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

本文链接:https://www.f2er.com/3048193.html

大家都在问