2015-02-09 34 views
0

双项的PostgreSQL计数

region_id | zip_code 
    1  | 10001 
    1  | 10002 
    2  | 89001 

我有邮政编码数据 - 10001 10001,89001,10002

我需要计算计数邮政编码对于每个区域(包括重复的邮编)。

region_id | count 
    1  | 3 
    2  | 1 

我尝试此查询:

SELECT region_id, COUNT(region_id) as count FROM my_table 
WHERE zip_code in ('10001','89001','10001','10002') GROUP BY region_id; 

但此查询返回2计数1个REGION_ID,这是不正常的我。

我已经用我的语言做了for循环,但也许可以用SQL来完成,以获得更好的性能。

+2

'count'不会计算'IN'子句中出现多少个值,它会计数记录。在表匹配区域1中有2条记录。如果要计算“IN”子句中的值,请在导出这些值的位置执行该操作。 – faintsignal 2015-02-09 04:44:03

回答

1

如果你想解释重复在你的输入(不是在你实际的表),你只需要一个join

select region_id, count(region_id) as "count" 
from my_table 
join unnest(array[10001, 89001, 10001, 10002]) zip_code using (zip_code) 
group by region_id 

SQLFiddle


但我实在想不出任何你需要的理由;请更新您的问题(提供给我们更多的上下文),以帮助您找到更好的解决方案。

+0

谢谢!它完全符合我的需求。我的整个逻辑有点复杂,只是它的一部分。 – Tom 2015-02-09 13:30:55