我有两张桌子:

Customer table

CustomerId FirstName LastName Country
1 Luís Gonçalves Brazil
2 Leonie Köhler Germany
3 François Tremblay Canada
4 Bjørn Hansen Norway
52 Emma Jones United Kingdom
53 Phil Hughes United Kingdom

Invoice table

InvoiceId CustomerId Total
1 2 1.98
2 4 3.96
3 8 5.94
140 52 23.76
369 52 13.86
283 53 28.71
109 53 8.91

我必须写一个查询,返回国家、顶级客户以及他们花了多少钱.对于共享最高消费金额的国家,请提供所有花费此金额的客户.

我写了一个这样的问题:

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

查询未找到最大值,但返回所有可用值.

感谢您的帮助.非常感谢.

推荐答案

您没有与我们共享数据库.

select CustomerId
       , FirstName
       , LastName
       , Country
       , max(tot)
from ( select sum(i1.Total) as tot
              , i1.CustomerId
              , c1.Country
              , c1.FirstName
              , c1.LastName
       FROM Customer c1
       JOIN Invoice i1
       ON c1.CustomerId = i1.CustomerId
       group by i1.CustomerId) TAB
group by Country

DEMO

在OP的 comments 之后,我编辑了代码:

select c.CustomerId, c.FirstName, c.LastName, c.Country, sum(Total)
from Customer c
JOIN Invoice i ON c.CustomerId = i.CustomerId
group by country, c.CustomerId
having sum(Total) in (select  max(tot) as tot2
                      from (select sum(i1.Total) as tot
                                   , country
                            FROM Customer c1
                            JOIN Invoice i1
                            ON c1.CustomerId = i1.CustomerId
                            group by i1.CustomerId) TAB
                      group by country)

DEMO2

Sql相关问答推荐

获取每5分钟时间间隔的总和

从列的不同值创建列

Stack Exchange站点上的最短帖子(按正文长度计算,用户名为原始发帖(SEDE))

如果开始期间不存在PostgresSql回填数据

使用sede获取不一定有两个不同标签的所有问题

通过对象分离实现原子性

在SQL查询中查找客户端的最短日期比较列和多行

SAS proc freq 或 proc sql 获取数据子集和整个数据的频率

仅当 SQL Server 中的表为开时,才在存储过程中使用更改跟踪

当 2 列具有静态值并且第 3 列使用运算符 IN 时,对 PostgreSQL 和 3 列上的复杂索引的最佳查询

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

如何将 CONCATENATED 值与临时表中的值匹配

使用 GROUP BY 时如何创建其他组?

MIN MAX 值与条件绑定

从每行中排除最大元素

PostgreSQL 如何在一组项目及其数量上找到完全相同的订单?

SQL/Postgres:按日期和其他属性对相关性能进行分组

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数

在 SQL 中将行显示为列