Oracle WITH子句和按结果分组

时间:2013-01-24 19:35:50

标签: sql plsql

我有两个表:产品表和区域表。产品表包含产品ID和区域代码,表示可以销售的国家/地区:

PRODUCT:

PRODUCT_ID  | TERRITORY_CODE
----------------------------
   PROD1    |       2
   PROD2    |       0
   PROD3    |       1
   PROD4    |       0
   PROD5    |       2
   PROD6    |       0
   PROD7    |       2

第二个表格包含一个区域代码以及允许销售的国家/地区的相应ISO代码。例如:

TERRITORY:

TERRITORY_CODE | COUNTRY_CODE
---------------------------
      0        |     US
      1        |     CA
      2        |     US
      2        |     CA

我想写一个查询,使用PRODUCT_IDs作为关键字计算COUNTRY_CODE的数量。

例如,我想知道在美国有多少不同的产品可供出售。我不想知道02是包含美国的地区代码,我只想查看COUNTRY_CODE。我怎么能这样做?

在一些初步研究中,我发现WITH子句可能有用,并提出以下查询:

WITH country AS (
  SELECT (DISTINCT COUNTRY_CODE)
  FROM TERRITORY
) 
SELECT COUNT(DISTINCT PRODUCT_ID) 
FROM country c,
PRODUCT p
WHERE p.TERRITORY_CODE=c.TERRITORY_ID;

但是,这不会产生预期的结果。我也无法通过COUNTRY_CODE分组。我做错了什么?

1 个答案:

答案 0 :(得分:4)

您似乎需要使用GROUP BY。尝试这样的事情:

SELECT T.Country_Code, COUNT(DISTINCT PRODUCT_ID) 
FROM Product P
JOIN Territory T ON P.Territory_Code = T.Territory_Code
GROUP BY T.Country_Code

SQL Fiddle

祝你好运。

相关问题