SQL - 多表多分组计算求和

描述

Customers 表有字段,顾客名称:cust_name、顾客id:cust_id
cust_id cust_name
cust10 andy
cust1 ben
cust2 tony
cust22 tom
cust221 an
cust2217 hex
Orders订单信息表,含有字段,订单号:order_num、顾客id:cust_id
order_num cust_id
a1 cust10
a2 cust1
a3 cust2
a4 cust22
a5 cust221
a7 cust2217
OrderItems表有字段,商品订单号:order_num、商品数量:quantity、商品价格:item_price
order_num quantity item_price
a1 1000 10
a2 200 10
a3 10 15
a4 25 50
a5 15 25
a7 7 7
【问题】
除了返回顾客名称和订单号,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),添加第三列 OrderTotal,其中包含每个订单的总价,并按顾客名称再按订单号对结果进行升序排序。
 
【示例结果】返回顾客名称 cust_name、订单号order_num、订单总额OrderTotal
cust_name order_num OrderTotal
an a5 375
andy a1 10000
ben a2 2000
hex a7 49
tom a4 1250
tony a3 150

【示例解析】
例如顾客名称cust_name为an的顾客的订单a5的订单总额为quantity*item_price = 15 * 25 = 375,最后以cust_name和order_num来进行升序排序。
 
 
 
我的代码:
Select c.cust_name, o.order_num, sum(i.quantity*i.item_price) as OrderTotal 
FROM Customers c 
join Orders o on c.cust_id = o.cust_id 
join OrderItems i on o.order_num = i.order_num
group by c.cust_name, o.order_num 
order by
    c.cust_name, o.order_num;

这里需要注意,group by 要先按c表的cust_name分组,然后按o表的order_num分组,不能跳过左侧的表而用最里层的i进行分组。

posted @ 2023-04-13 12:23  热爱工作的宁致桑  阅读(309)  评论(0编辑  收藏  举报