【问题标题】:How do I count and sum from different tables (SQL)如何从不同的表中计算和求和(SQL)
【发布时间】: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连接。其次,您应该分享一些示例数据和预期结果以供他人更好地帮助您。

标签: sql oracle


【解决方案1】:

从逻辑上讲,您的查询看起来是正确的,但在 FROM 子句中使用逗号写得不好。此外,您无需加入customers 表。

所以,我会推荐:

SELECT o.customer_num AS "Customer Number",
       COUNT(DISTINCT o.order_num) AS "Order Amount",
       SUM(i.quantity) AS "Quantity of Items",
       SUM(i.total_price) AS "Total Price w/o shipping"
FROM orders o JOIN
     items i
     ON o.order_num = i.order_num
GROUP BY o.customer_num
ORDER BY o.customer_num ASC;

COUNT(DISTINCT) 应该在计算订单方面做你想做的事。

【讨论】:

  • 嗨,戈登,感谢您抽出宝贵的时间,我很感激。我正在上 Oracle 编程课程,他们使用的教科书是 Casteel 的 Oracle 12c,这就是为什么我的代码看起来像它的样子(我在第 1-5 章)。我尝试了类似的东西,它产生了相同的结果,所以这可能是正确的。 1 个问题,在 FROM 中,您有订单 o 和项目 i,然后您在代码中使用 o 和 i。在那个 FROM 区域,您基本上将 i 和 o 分配为各自的表名吗?再次感谢您的宝贵时间。
  • @AdamDRuffolo 。 . .很遗憾,一个班级会使用带有这种过时 SQL 的教科书。不像去年推出的JOIN。自 1990 年代以来,它就已成为标准的一部分,并且长期受到 Oracle 的支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 2019-02-23
相关资源
最近更新 更多