【问题标题】:Using count, sum, and group by in a sql query在 sql 查询中使用 count、sum 和 group by
【发布时间】:2018-10-11 13:13:34
【问题描述】:

我正在尝试编写一个查询来显示订单数量以及每个客户在这些订单中购买的商品数量

SELECT customers.customer_id, COUNT(orders.order_id),  
SUM(order_details.order_qty)
FROM customers
LEFT OUTER JOIN orders 
ON orders.customer_id=customers.customer_id
LEFT OUTER JOIN order_details 
ON order_details.order_id=orders.order_id
GROUP BY customers.customer_id;

我有三个要加入的表,正如您目前所写的那样...问题是我的查询结果是错误的

customer_id: 1 应该有 3 个订单,并且这些订单的商品数量应该是 5

下面是另一张图片,显示了其他表格包含的内容:

我使用的是 Oracle 数据库版本 12.2.0.1.0

订单详情:

订单:

客户:

【问题讨论】:

  • 如果没有产生这些结果的数据,我们将无能为力。
  • 我已经添加了数据样本
  • 支持您的断言1 should have 3 orders and the quantity of items n those orders should be 5 的数据样本会很有帮助。随意挑选一些彼此无关且与您争论的结果无关的订单和物品是毫无意义的。

标签: sql oracle


【解决方案1】:

问题是我的查询结果有误

您的订单可能有多个详细信息记录。因此,像这样加入它们将根据详细信息记录的数量生成一个产品..

您可以做的是使用内联视图来聚合每个订单 ID 的 qty

SELECT customers.customer_id
       , COUNT(orders.order_id)
       , SUM(order_details.tot_qty)
FROM customers
LEFT OUTER JOIN orders 
ON orders.customer_id=customers.customer_id
LEFT OUTER JOIN (select order_id, SUM(order_qty) as tot_qty 
                 from order_details 
                 group by order_id) order_details
ON order_details.order_id=orders.order_id
GROUP BY customers.customer_id;

【讨论】:

  • 这将修复 COUNT(order_id) 但不会更改 SUM(qty) 的结果。操作员“声称”他们的 SUM(qty) 结果为 7,他们“断言”他们应该得到 5。不幸的是,他们包含的样本数据与他们的断言无关,所以很难说出他们在说什么:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2021-12-19
  • 2023-03-11
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多