我有以下表格;格式: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_ID和DISTINCT(ZIP_CODE)
COUNT(ORDER_ID)
SUM(AMOUNT)
CALENDAR_WEEK
REGION_ID
DISTINCT(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)
ZIP_CODE
我希望我能说清楚。在此先感谢您的帮助
您误会了什么distinct。它不是功能。它是一个修饰符select,它会影响 所有 选定的列。因此,它的行为完全正确。
distinct
select
如果您想按邮政编码和周进行汇总,则这些应是仅两列group by:
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假设每个邮政编码都在一个区域中,那么您可能还需要包括在内。
region_id