[英]Oracle SQL group by not functioning correctly
当我尝试按名称和 ID 对其进行分组时,它仍然显示重复项。 我怎么能把这5个名字合二为一?
SELECT C.CUSTOMER_ID, C.NAME, OI.ORDER_ID, O.ORDER_DATE, SUM(OI.QUANTITY), SUM(OI.QUANTITY * OI.UNIT_PRICE)
FROM CUSTOMERS C
INNER JOIN ORDERS O ON C.CUSTOMER_ID = O.CUSTOMER_ID
INNER JOIN ORDER_ITEMS OI ON O.ORDER_ID = OI.ORDER_ID
WHERE C.CUSTOMER_ID = 44
GROUP BY OI.ORDER_ID, O.ORDER_DATE, C.CUSTOMER_ID, C.NAME
ORDER BY SUM(OI.QUANTITY * OI.UNIT_PRICE) DESC;
我猜你想要每个客户一行:
SELECT C.CUSTOMER_ID, C.NAME, SUM(OI.QUANTITY), SUM(OI.QUANTITY * OI.UNIT_PRICE)
FROM CUSTOMERS C INNER JOIN
ORDERS O
ON C.CUSTOMER_ID = O.CUSTOMER_ID INNER JOIN
ORDER_ITEMS OI
ON O.ORDER_ID = OI.ORDER_ID
WHERE C.CUSTOMER_ID = 44
GROUP BY C.CUSTOMER_ID, C.NAME
ORDER BY SUM(OI.QUANTITY * OI.UNIT_PRICE) DESC;
更特定于订单的列不应在SELECT
或GROUP BY
。
如上所述,你得到了你所要求的。 然而,我最好的猜测是,您需要单独的姓名、ID 和订单日期字段,然后您需要每个客户的小计。 这样做的方法是使用 ROLLUP:
SELECT *
FROM (SELECT C.CUSTOMER_ID, C.NAME, OI.ORDER_ID, O.ORDER_DATE,
SUM(OI.QUANTITY) AS ITEM_QUANTITY,
SUM(OI.QUANTITY * OI.UNIT_PRICE) AS EXTENDED_PRICE
FROM CUSTOMERS C
INNER JOIN ORDERS O
ON C.CUSTOMER_ID = O.CUSTOMER_ID
INNER JOIN ORDER_ITEMS OI
ON O.ORDER_ID = OI.ORDER_ID
WHERE C.CUSTOMER_ID = 44
GROUP BY ROLLUP (C.CUSTOMER_ID, C.NAME, OI.ORDER_ID, O.ORDER_DATE))
WHERE CUSTOMER_ID IS NOT NULL AND
NAME IS NOT NULL AND
(ORDER_DATE IS NOT NULL OR
(ORDER_DATE IS NULL AND ORDER_ID IS NULL))
ORDER BY CUSTOMER_ID, NAME, EXTENDED_PRICE DESC
这产生的结果是
CUSTOMER_ID NAME ORDER_ID ORDER_DATE ITEM_QUANTITY EXTENDED_PRICE
44 Jabil Circuit 3772 3334311.72
44 Jabil Circuit 92 28-AUG-15 790 1050939.97
44 Jabil Circuit 69 17-MAR-17 581 755093.92
44 Jabil Circuit 10 24-JAN-17 883 621052.99
44 Jabil Circuit 29 14-AUG-17 831 508588.59
44 Jabil Circuit 82 16-DEC-16 687 398636.25
外部查询中的 WHERE 子句只是去掉了一些不需要的小计行 - 尝试取出 WHERE 子句,看看它从结果集中消除了什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.