我有一张看起来像这样的表:

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

10-06 02:31