多个最大行

时间:2019-06-21 15:25:28

标签: sql sql-server greatest-n-per-group

我需要写一个查询来确定每个国家在音乐上花费最多的客户。编写一个查询,返回该国家和最大客户以及他们花费了多少。对于共享最高消费金额的国家/地区,请提供所有使用此金额的客户。

您只需要使用“客户”和“发票”表即可。

检查您的解决方案

尽管只有24个国家/地区,但您的查询应返回25行,因为英国有2个共享最大的客户。

我建立了查询,但是有一组必须显示两个最大结果

SELECT CustomerId , FirstName, LastName, Country, MAX(TotalSpent) AS  TotalSpent 
from  (select c.CustomerId as CustomerId, c.Firstname As FirstName,  c.LastName as LastName, i.BillingCountry as Country, SUM(i.Total) as TotalSpent
from customer c join invoice i
on c.CustomerId = i.CustomerId
   group by 1,2,3,4
   order by 5 desc
   limit by 1 ) AS temp
   group by 4

预期结果必须是25行而不是24行 英国有两个客户共享相同的最大消费金额

1 个答案:

答案 0 :(得分:0)

以下脚本将帮助您获得所需的结果。我已在脚本中使用RANK来选择一个或多个客户(每个国家/地区发送的最大金额)。

    WITH Customer(CustomerId,FirstName,LastName)
AS
(
    SELECT 1, '1 FN', '1 LN' UNION ALL
    SELECT 2, '2 FN', '2 LN'
),
Invoice(CustomerId,Country,Total)
AS
(
    SELECT 1, 'C 1', 100 UNION ALL
    SELECT 1, 'C 1', 35 UNION ALL
    SELECT 2, 'C 1', 80 UNION ALL
    SELECT 2, 'C 1', 80 UNION ALL
    SELECT 1, 'C 2', 50 UNION ALL   
    SELECT 2, 'C 2', 100 UNION ALL
    SELECT 1, 'C 2', 50 UNION ALL
    SELECT 1, 'C 3', 17 UNION ALL   
    SELECT 2, 'C 3', 17
)

SELECT 
    B.Country, 
    B.CustomerId, 
    C.FirstName, 
    C.LastName, 
    B.T AS TotalSpent
FROM
(
    SELECT *, 
           RANK() OVER(PARTITION BY Country
           ORDER BY Country, 
                    T DESC) RN
    FROM
    (
        SELECT i.Country, 
               C.CustomerId, 
               SUM(i.Total) T
        FROM Customer C
             INNER JOIN Invoice I ON c.CustomerId = i.CustomerId
        GROUP BY i.Country, 
                 C.CustomerId
    ) A
) B
INNER JOIN Customer C ON B.CustomerId = C.CustomerId
WHERE B.RN = 1
ORDER BY 1,2

输出为(考虑CTE输入)-

Country   CustomerId    FirstName   LastName    TotalSpent
C 1       2             2 FN        2 LN        160
C 2       1             1 FN        1 LN        100
C 2       2             2 FN        2 LN        100
C 3       1             1 FN        1 LN        17
C 3       2             2 FN        2 LN        17
相关问题