题解 | #确定最佳顾客的另一种方式(二)#

确定最佳顾客的另一种方式(二)

https://www.nowcoder.com/practice/b5766f970ae64ac7944f37f5b47107aa

方法一:

  1. 首先考虑的是将三个表连接起来。从结果开始思考,首先需要cust_name,故第一个表选择Customers。
  2. 由于需要从cust_name得到order_num进而计算total_price。故和Orders表进行连接。
  3. 计算total_price,由于需要考虑每一个order_num对应的总钱数,故考虑在OrderItems上对order_num进行分组,计算total_price。
  4. 计算后得到的total_price,不能直接在外层使用。故使用order_num,和toal_price组成一个临时表传递到外层查询语句,进行连接。
  5. 得到最终结果表,直接显示即可。
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;

全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务