我需要解决此SQL查询的解决方案

时间:2019-12-05 17:18:04

标签: sql data-analysis

  

“写一个查询来确定花费最多的客户   每个国家的音乐。编写查询以返回国家/地区   与最高客户,以及他们花了多少钱。对于那些   最高消费金额是共享的,向所有花费此金额的客户提供   数量。

     

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

     

检查您的解决方案

     

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

您可以在此处找到数据集

Data Table

这是我尝试使用结果的代码

Query Trial

这是预期的结果

Expected Results

2 个答案:

答案 0 :(得分:0)

通常,您应始终GROUP BY SELECT中不是聚合函数的任何内容(例如SUM)。试试这个:

SELECT c.CustomerId, c.FirstName, c.LastName, c.Country,
       SUM(i.Total) AS TotalSpent
FROM Customer c
JOIN Invoice i
ON i.CustomerId = c.CustomerId
GROUP BY c.CustomerId, c.FirstName, c.LastName, c.Country
ORDER BY c.Country

答案 1 :(得分:0)

WITH tab1 AS ( SELECT c.CustomerId, c.FirstName, c.LastName, c.Country, SUM(i.Total) TotalSpent FROM Customer c JOIN Invoice i ON c.CustomerId = i.CustomerId GROUP BY c.CustomerId ) SELECT tab1.* FROM tab1 left JOIN ( SELECT CustomerId, FirstName, LastName, Country, MAX(TotalSpent) AS TotalSpent FROM tab1 GROUP BY Country ) tab2 ON tab1.Country = tab2.Country WHERE tab1.TotalSpent = tab2.TotalSpent ORDER BY Country;