题解 | 确定最佳顾客的另一种方式(二)
SELECT c.cust_name, SUM(a.item_price * a.quantity) AS total_price FROM OrderItems a INNER JOIN Orders b ON a.order_num = b.order_num INNER JOIN Customers c ON b.cust_id = c.cust_id GROUP BY c.cust_id, c.cust_name HAVING SUM(a.item_price * a.quantity) >= 1000 ORDER BY total_price
1. WHERE
子句中使用了别名列
在WHERE
子句中,你使用了total_price
,这是在SELECT
子句中定义的别名列。在SQL中,WHERE
子句无法直接使用SELECT
子句中定义的别名列。你需要在WHERE
子句中使用完整的表达式。
2. WHERE
子句的逻辑问题
即使你修复了WHERE
子句中使用别名列的问题,WHERE
子句中的条件total_price >= 1000
也会导致逻辑错误。WHERE
子句是在分组之前过滤数据的,而total_price
是分组后的结果。因此,你应该使用HAVING
子句来过滤分组后的结果。