我一直在寻找这个,看起来它应该是简单的东西,但显然不是那么多。我想使用数组参数在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(函数)以使其变得简单。
答案 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;