1

我有一个表x,其中包含字段abcd。我想做一个SELECT语句,它是GROUPED BY a HAVING a_particular_value = ANY (array_agg( b)) 并检索 aMIN ( d) 和c<- 从中选择的行a_particular_value = ANY(array_agg(b))。这有点令人困惑。

让我试着解释一下。a_particular_value = ANY(array_agg(b))将从按 分组的所有记录中选择一些或一条记录a。我想c从导致条件为真的记录中检索 的值。虽然不过滤掉其他记录,因为我仍然需要其他聚合函数的记录,MIN(d).

我尝试进行的查询:

SELECT a, MIN(d) FROM x
GROUP BY a
HAVING 1 = ANY(array_agg(b))

唯一剩下要做的就是放入cSELECT子句。我该怎么做呢?

4

2 回答 2

1
with agg as (
    select a, min(d) as d
    from x
    group by a
    having 1 = any(array_agg(b))
)
select distinct on (a, c)
    a, c, d
from
    x
    inner join
    agg using (a, d)
order by a, c

如果在组min(d)内不是唯一的a,则可能存在多个对应c的 。以上将返回最小的c。如果你想要最大的做而不是

order by a, c desc
于 2013-07-09T11:18:23.043 回答
0

c在这种情况下可以有不同的值,所以你唯一的选择就是分组c

SELECT a, c FROM x
GROUP BY a, c
HAVING 1 = ANY(array_agg(b))

如果您想b在申请之前消除不满足条件的行,GROUP BY用作http://www.postgresql.org/docs/9.2/static/sql-select.html#SQL-HAVINGWHERE的文档HAVING

于 2013-07-09T07:00:06.713 回答