题解 | #返回顾客名称和相关订单号以及每个订单的总价#
返回顾客名称和相关订单号以及每个订单的总价
https://www.nowcoder.com/practice/4dda66e385c443d8a11570a70807d250
只group by一个变量会报错的原因:
对order_num分组后,联表结果会折叠显示,比如原本同一订单可能对应两个或以上顾客,折叠后只显示其中一个客户信息。
这时使用聚合函数计算OrderTotal,若只select订单信息及OrderTotal不会报错。但若要同时select对应客户信息,由于某个订单及OrderTotal对应的可能是多个客户,结果又不能显示多条客户信息,而只能显示折叠后的客户信息,这与select要求冲突,故报错。
本题中即使订单信息和客户信息都是一对一的,但为避免以上情况出现,sql将程序设置为仍会报错。
select c.cust_name, oi.order_num, sum(oi.quantity*oi.item_price) OrderTotal from Customers c inner join Orders o on c.cust_id=o.cust_id inner join OrderItems oi on o.order_num=oi.order_num group by c.cust_name,oi.order_num order by c.cust_name asc, oi.order_num asc
select c.cust_name, oi.order_num, sum(oi.quantity*oi.item_price) OrderTotal from Customers c, Orders o, OrderItems oi where c.cust_id=o.cust_id and o.order_num=oi.order_num group by c.cust_name,oi.order_num order by c.cust_name asc, oi.order_num asc