在sql查询中使用count、sum和group by

在sql查询中使用count、sum和group by,sql,oracle,Sql,Oracle,我试图编写一个查询,显示订单数量以及每个客户在这些订单中购买的商品数量 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_detail

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

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;
我有三个表要连接,正如您在我目前所写的内容中看到的……问题是我的查询结果是错误的

客户id:1应具有3个订单,且这些订单中的项目数量应为5

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

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

订单详情:

订单:

顾客:

问题是我的查询结果是错误的

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

您可以使用内联视图聚合每个订单ID的
数量

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;

如果没有生成这些结果的数据,我们无法帮助您。我添加了数据样本支持您的断言的数据样本
1应该有3个订单,这些订单中的项目数量应该是5个,这将非常有用。随机少量的订单和项目彼此无关,与您争论的结果无关,这是毫无意义的。这将修复计数(订单id),但不会改变总和(数量)的结果。op“声明”他们的总和(数量)结果为7,他们“断言”他们应该得到5。不幸的是,他们包含的样本数据与他们的断言无关,因此很难说他们在说什么:(