在postgres中按数组参数选择计数的结果集

时间:2015-12-02 03:28:01

标签: arrays postgresql parameters count

我一直在寻找这个,看起来它应该是简单的东西,但显然不是那么多。我想使用数组参数在PostgreSQL 9.4.x中返回一个resultSet:

| id | count |
--------------
| 1  |   22  |
--------------
| 2  |   14  |
--------------
| 14 |   3   |

我提交参数{'1','2','14'}

使用某些东西(显然不是):

SELECT id, count(a.*) 
FROM tablename a
WHERE a.id::int IN array('{1,2,14}'::int);

我想首先测试它,然后将其写为storedProc(函数)以使其变得简单。

2 个答案:

答案 0 :(得分:0)

算了,这就是答案:

SELECT a.id,
       COUNT(a.id)
FROM tableName a
WHERE a.id IN
    (SELECT b.id 
     FROM tableName b
     WHERE b.id = ANY('{1,2,14}'::int[])
    )
GROUP BY a.id;

答案 1 :(得分:0)

您可以简化为:

SELECT id, count(*) AS ct
FROM   tbl
WHERE  id = ANY('{1,2,14}'::int[])
GROUP  BY 1;

更多:

要在输入数组中包含未找到的ID,我建议unnest()后跟LEFT JOIN

SELECT id, count(t.id) AS ct
FROM   unnest('{1,2,14}'::int[]) id
LEFT   JOIN tbl t USING (id)
GROUP  BY 1;

相关:

如果数组参数中的NULL值以及id列中的(这将是一个奇怪的设计),你需要(更慢!) NULL安全比较:

SELECT id, count(t.id) AS ct
FROM   unnest('{1,2,14}'::int[]) id
LEFT   JOIN tbl t ON t.id IS NOT DISTINCT FROM id.id
GROUP  BY 1;