首页 > 解决方案 > 在 sql 查询中使用 count、sum 和 group by

问题描述

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

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

订单详细信息: 在此处输入图像描述

订单: 在此处输入图像描述

顾客: 在此处输入图像描述

标签: sqloracle

解决方案


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

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

您可以做的是使用内联视图来聚合qty每个订单 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;

推荐阅读