我目前正在学习SQL,我需要执行一些SQL查询。我无法实现一个特定的查询。
必须返回同一客户的所有订单的哪些客户拥有(完全)最昂贵的订单?
customerid
和total value
作为结果。
表格是:
Salesorderheader
:
salesorderid (int) customerid (int) totaldue (double)
1 32000 3.20000
我使用的数据库系统是Postgresql。我到目前为止的查询是:
SELECT totaldue, customerid
FROM salesorderheader
WHERE totaldue = (SELECT max(totaldue) FROM salesorderheader);
此查询错误,因为必须返回标记为total_value
的新值(同一客户的所有订单的总值)或类似内容。
我知道SQL函数sum()
必须与GROUP BY customerid)
结合使用,但到目前为止我未能实现正确的查询。
感谢您的时间。
注意:如果我违反任何网站规则或此帖子重复,请立即让我立即删除此帖子
答案 0 :(得分:1)
这给了客户最大的开支:
SELECT distinct max(totaldue) over (partition by customerid),customerid
FROM salesorderheader
order by 1 desc
;
这显示了所有人之间浪费最多的客户:
select sum(totaldue) over (partition by customerid),customerid
FROM salesorderheader
order by 1 desc
limit 1
;
答案 1 :(得分:1)
选择前1名customer_id,sum(total_due)为总数
进入#top
来自salesorderheader的
按customer_id分组
按sum(total_due)desc排序;
从#top t
中选择*内部联盟salesorderheader soh
on soh.customer_id = t.customerid;
drop table #top;
我为格式化道歉,我在移动设备上