题解 | #确定最佳顾客的另一种方式(二)#
确定最佳顾客的另一种方式(二)
https://www.nowcoder.com/practice/b5766f970ae64ac7944f37f5b47107aa
方法一:
- 首先考虑的是将三个表连接起来。从结果开始思考,首先需要cust_name,故第一个表选择Customers。
- 由于需要从cust_name得到order_num进而计算total_price。故和Orders表进行连接。
- 计算total_price,由于需要考虑每一个order_num对应的总钱数,故考虑在OrderItems上对order_num进行分组,计算total_price。
- 计算后得到的total_price,不能直接在外层使用。故使用order_num,和toal_price组成一个临时表传递到外层查询语句,进行连接。
- 得到最终结果表,直接显示即可。
SELECT cust_name, total_price FROM Customers INNER JOIN Orders USING(cust_id) INNER JOIN ( SELECT order_num,SUM(item_price*quantity) total_price FROM OrderItems GROUP BY order_num HAVING total_price >= 1000 ) temp USING(order_num) ORDER BY total_price;
方法二:
大致思路与一相同,但把过滤这一步骤放在了外面。连接的时候直接连接,不管其他。
SELECT c.cust_name,SUM(oi.item_price*oi.quantity) total_price FROM Customers c INNER JOIN Orders o USING(cust_id) INNER JOIN OrderItems oi USING(order_num) GROUP BY cust_name HAVING total_price >= 1000 ORDER BY total_price;