【发布时间】:2020-09-06 19:05:21
【问题描述】:
我正在尝试编写一个执行此操作的 SQL 语句:
对于每个有订单的客户,我需要列出客户的编号、客户的订单数量、这些订单上的商品总数量以及这些商品的总价格。然后我需要按客户编号对结果进行排序。
我有下面的代码。它有效,但结果不正确。对于 1 个客户,它说订单数量是 2,但只有 1 个订单,价格出来就像是 2 个订单。另一个客户有 3 个订单,但显示的是 4 个。我假设我缺少连接功能?
我有 3 个表,一个 Customer 表 (Customer_Name),Orders 表 (order_num, order_date, customer_num),Items 表 (item_num, order_num, quantity, total_price)
SELECT customer.customer_num AS "Customer Number",
COUNT(DISTINCT orders.order_num) AS "Order Amount",
SUM(items.quantity) AS "Quantity of Items",
SUM(items.total_price) AS "Total Price w/o shipping"
FROM items, orders, customer
WHERE customer.customer_num = orders.customer_num
AND orders.order_num = items.order_num
GROUP BY customer.customer_num
ORDER BY customer.customer_num ASC;
任何帮助都会很棒。谢谢。
【问题讨论】:
-
由于不正确的 JOIN 问题,您遇到了重复问题。您需要加入所有适当的列以减少重复。此外,连接重复是由于多对一的情况而发生的,其中重复是预期的结果,但确实会搞砸事情,尤其是 aggs。
-
首先你应该使用ANSI标准连接而不是传统的Oracle连接。其次,您应该分享一些示例数据和预期结果以供他人更好地帮助您。