簡體   English   中英

Oracle SQL 組無法正常運行

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

更特定於訂單的列不應在SELECTGROUP 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 子句,看看它從結果集中消除了什么。

db<>在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM