admin

ORACLE SQL选择不删除重复项

sql

我有以下表格;格式:table_name [column1,column2等。]

VENDOR_ORDERS [ORDER_ID, ORDER_CREATION_DATETIME, REGION_ID, ZIP_CODE, AMOUNT]
CALENDAR [CALENDAR_WEEK, CALENDAR_DATE]

基本上我想要达到的目的是编写一个查询,该查询将给我:

COUNT(ORDER_ID)SUM(AMOUNT)CALENDAR_WEEK对每一个REGION_IDDISTINCT(ZIP_CODE)

因此结果应如下所示:

ZIP_CODE    CALENDAR_WEEK    REGION_ID    COUNT(ORDER_ID)    SUM(AMOUNT)
                            --------------------
XXXXX           01              1             50               987.45
YYYYY           01              1             25               568.32
ZZZZZ           01              1             30               555.63
MMMMM           01              1             10               099.93
XXXXX           15              1             05               999.34
YYYYY           15              1             32               339.67
ZZZZZ           15              1             21               457.23
MMMMM           15              1             88               459.99

我用下面的代码:

SELECT
    DISTINCT(vo.ZIP_CODE)
    ,TO_CHAR(ca.CALENDAR_WEEK)
    ,TRUNC(vo.ORDER_CREATION_DATETIME) -- this column is not needed, i just added it for visualization purposes
    ,vo.REGION_ID
    ,COUNT(vo.ORDER_ID)
    ,SUM(vo.AMOUNT)
FROM
    VENDOR_ORDERS vo
    ,CALENDAR ca
WHERE   
    TRUNC(vo.ORDER_CREATION_DATETIME) = sd.CALENDAR_DATE
    AND vo.REGION_ID = 1
GROUP BY
    vo.ZIP_CODE
    ,TO_CHAR(ca.CALENDAR_WEEK)
    ,vo.ORDER_CREATION_DATETIME
    ,vc.REGION_ID;

问题是,我没有得到DISTINCT(ZIP_CODE)CALENDAR_WEEK,我有重复ZIP_CODE了相同的CALENDAR_WEEK,相同的REGION_ID,但不同的COUNT(ORDER_ID)SUM(AMOUNT)

我希望我能说清楚。在此先感谢您的帮助


阅读 138

收藏
2021-06-07

共1个答案

admin

您误会了什么distinct。它不是功能。它是一个修饰符select,它会影响 所有 选定的列。因此,它的行为完全正确。

如果您想按邮政编码和周进行汇总,则这些应是仅两列group by

SELECT vo.ZIP_CODE, TO_CHAR(ca.CALENDAR_WEEK),
       -- vo.REGION_ID
        COUNT(vo.ORDER_ID),
        SUM(vo.AMOUNT)
FROM VENDOR_ORDERS vo JOIN
     CALENDAR ca
     ON TRUNC(vo.ORDER_CREATION_DATETIME) = sd.CALENDAR_DATE
WHERE vo.REGION_ID = 1
GROUP BY vo.ZIP_CODE, TO_CHAR(ca.CALENDAR_WEEK)

region_id假设每个邮政编码都在一个区域中,那么您可能还需要包括在内。

2021-06-07