题解 | #返回每个顾客不同订单的总金额#

返回每个顾客不同订单的总金额

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分组。但是加上也无妨?我加上了也没问题。

全部评论
这里补充一下子查询的运行次序:“外部查询运行一行,内部运行一次。外部运行订单编号001,内部001求和一次;外部运行订单编号002,内部001不求和,002求和;完成分组的效果。”
1 回复 分享
发布于 2024-08-07 16:55 江苏

相关推荐

_mos_:我以为手抄报简历就已经很顶了,没想到还有表格简历
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务