问题描述
我有一张桌子
create table mock_sales
(
first_name character varying,last_name character varying,amount integer
);
insert into mock_sales(first_name,last_name,amount)
values('ted','mosby',100),('lily','aldrin',400),('ted',350),('barney','Stinson',180)
所需的输出
最高金额的人
泰德莫比 //泰德莫比总和= 450(100 + 350),这是最大的
我尝试过
Select first_name,last_name from mock_sales group by first_name,last_name where amount in (
select max(amount) from t
(select sum(amount) as amount from mock_sales as t group by first_name,last_name)
or
select t.first_name,t.last_name from mock_sales where max(amount) == t.amount and t.amount in (
Select first-name,sum(amount) as amount from mock_sales as t group by first_name,last_name)
但是他们都给出了语法错误。任何帮助将不胜感激。
在合并2个查询的结果时遇到麻烦。
解决方法
因为您想要总和而不是最大值,所以请尝试以下方法:
SELECT first_name,last_name,SUM(amount) AS amount FROM mock_sales
GROUP BY first_name,last_name ORDER BY amount DESC LIMIT 1;
,
您可以仅对具有相同名字/姓氏的记录进行分组,对结果进行排序并仅保留第一行:
select first_name,sum(amount) total_amount
from mock_sales
group by first_name,last_name
order by total_amount desc
limit 1
如果您想允许平局,那就有些不同了。在Postgres中,您可以使用窗口功能:
select *
from (
select first_name,sum(amount) total_amount,rank() over(order by sum(amount) desc) rn
from mock_sales
group by first_name,last_name
) t
where rn = 1