繁体   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