sql - 如何对不同表进行计数和求和 (SQL)

标签 sql oracle

我正在尝试编写一个 SQL 语句来执行此操作:

对于每个有订单的客户,我需要列出客户的编号、客户的订单数量、这些订单上的商品总数以及这些商品的总价格。然后我需要按客户编号对结果进行排序。

我有以下代码。它有效,但结果不正确。对于 1 个客户,它说订单数量是 2,但只有 1 个订单,而价格就像是 2 个订单一样。另一位客户有 3 个订单,但显示为 4 个。我假设我缺少连接功能?

我有 3 个表,客户表 (Customer_Name)、订单表 (order_num、order_date、customer_num)、商品表 (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;

任何帮助都会很棒。谢谢。

最佳答案

从逻辑上讲,您的查询看起来是正确的,但在 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) 应该按照您想要的方式计算订单。

关于sql - 如何对不同表进行计数和求和 (SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63767901/

相关文章:

mysql - 如何将一项大写但另一项不区分大小写?

sql - 复制一个有索引但没有数据的 Oracle 表

sql - 如何连接字符串?

java - ( Hibernate Oracle 无法插入 NULL ) 如何插入自动生成的 ID?

oracle - 在 oracle 的游标声明查询中使用变量

sql - 将常量表达式添加到 SELECT 列表会影响 DB2 中的查询执行时间吗?

java - 从文件读取直到 Java 中的特定字符

sql - sql查询中的总行数---sql server 2008

oracle - 将表列转换为键值对

sql - 按可为空的列分组