ORACLE SQL select distinct不删除重复项

nac*_*rCR 2 sql oracle select distinct

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

VENDOR_ORDERS [ORDER_ID, ORDER_CREATION_DATETIME, REGION_ID, ZIP_CODE, AMOUNT]
CALENDAR [CALENDAR_WEEK, CALENDAR_DATE]
Run Code Online (Sandbox Code Playgroud)

基本上我想要实现的是写一个会给我的查询:

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
Run Code Online (Sandbox Code Playgroud)

我使用以下代码:

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;
Run Code Online (Sandbox Code Playgroud)

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

我希望自己清楚明白.在此先感谢您的帮助

Gor*_*off 6

你误解了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)
Run Code Online (Sandbox Code Playgroud)

region_id假设每个邮政编码都在一个区域内,您也可以包括在内.