题解 | #返回每个顾客不同订单的总金额#
返回每个顾客不同订单的总金额
https://www.nowcoder.com/practice/ce313253a81c4947b20e801cd4da7894
select cust_id ,(select sum(item_price*quantity) from OrderItems where Orders.order_num = OrderItems.order_num group by OrderItems.order_num ) as total_ordered from Orders order by total_ordered desc;
题目:编写 SQL语句,返回顾客 ID(Orders 表中的 cust_id),并使用子查询返回total_ordered 以便返回每个顾客的订单总数,将结果按金额从大到小排序。
考察:作为计算字段使用子查询
这题需要从orders表里返回cust_id列,外加一个计算字段。这里total_ordered是一个计算字段,是由括号中的子查询建立的。
运行顺序:先从orders里面返回cust_id列,找出了四名顾客的ID;然后根据四个检索出来的顾客id再进行子查询,计算他们不同订单的总金额,最终将金额与顾客id匹配,对结果进行排序,完成检索。(个人理解)
重点:
1、子查询做计算字段使用时,要筛选条件时直接用【where+关联条件】进行关联,如 “where 表一.cust_id = 表二.cust_id”
2、关于是否使用group by 分组,这题有人没用group by 也得到了正确值,我理解的是,因为用了where 已经进行了条件筛选,如Orders表中的a0001对应的是OrderItems表中的每一个a0001,相当于完成了对订单号的分组,所以这里就省略了group by分组。但是加上也无妨?我加上了也没问题。