[英]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.