选择具有最大总值SQL Server的行

时间:2013-10-16 20:06:17

标签: sql

我有以下方案(2个表格):

客户(身份证,姓名)和 销售(Id,CustomerId,日期,总和)

如何选择以下数据?

1)有史以来最好的客户(客户,在总和列中有最大总价值)

例如,我有2个表(分别为Customers和Sales):

id    CustomerName      
---|--------------
1  | First         
2  | Second 
3  | Third 



id  CustomerId  datetime     Sum
---|----------|------------|-----
1  | 1        | 04/06/2013 | 50
2  | 2        | 04/06/2013 | 60
3  | 3        | 04/07/2013 | 30
4  | 1        | 03/07/2013 | 50
5  | 1        | 03/08/2013 | 50
6  | 2        | 03/08/2013 | 30
7  | 3        | 24/09/2013 | 20

期望的结果:

CustomerName TotalSum
------------|--------
 First      | 150

2)本年度每个月的最佳客户(与之前相同,但本年度每个月)

感谢。

2 个答案:

答案 0 :(得分:4)

尝试为有史以来最好的客户

SELECT Top 1 WITH TIES c.CustomerName, SUM(s.SUM) AS TotalSum
FROM Customer c JOIN Sales s ON s.CustomerId = c.CustomerId
GROUP BY c.CustomerId, c.CustomerName
ORDER BY SUM(s.SUM) DESC

答案 1 :(得分:1)

一种选择是将RANK()SUM汇总结合使用。这将为您提供整体价值。

select customername,  sumtotal
from (
  select c.customername, 
    sum(s.sum) sumtotal,
    rank() over (order by sum(s.sum) desc) rnk
  from customer c
    join sales s on c.id = s.customerid
  group by c.id, c.customername
  ) t
where rnk = 1

按月和年份对此进行分组应该是微不足道的。