我有一张看起来像这样的表:
val | fkey | num
------------------
1 | 1 | 1
1 | 2 | 1
1 | 3 | 1
2 | 3 | 1
我想要做的是返回一组行,其中值按“val”分组,带有 fkeys 数组,但仅当 fkeys 数组大于 1 时。因此,在上面的示例中,返回将看起来像:
1 | [1,2,3]
我有以下查询聚合数组:
SELECT val, array_agg(fkey)
FROM mytable
GROUP BY val;
但这会返回如下内容:
1 | [1,2,3]
2 | [3]
这样做的最佳方法是什么?我想一种可能性是使用我现有的查询作为子查询,并对其进行求和/计数,但这似乎效率低下。任何反馈都会真正有帮助!
最佳答案
使用 Having
子句过滤超过 fkey
的组
SELECT val, array_agg(fkey)
FROM mytable
GROUP BY val
Having Count(fkey) > 1