选择属于具有某些属性的组的所有行

时间:2014-05-05 17:15:20

标签: postgresql

我将PostgreSQL用于Web应用程序,并且遇到了一种我无法想到有效编写方式的查询。

我要做的是从表中选择所有行,当按特定方式分组时,该组符合某些条件。例如,构建此查询的天真方式可能是这样的:

SELECT *
FROM table T
    JOIN (
        SELECT iT.a, iT.b, SUM(iT.c) AS sum
        FROM table iT
        GROUP BY iT.a, iT.b
    ) TG ON (TG.a = T.a AND TG.b = T.b)
WHERE TG.sum > 100;

我遇到的问题是,这有效地加倍查询执行所需的时间,因为它实际上是从该表中选择两次行。

如何有效地构建此类型的查询?

1 个答案:

答案 0 :(得分:1)

你可以尝试窗口功能,虽然我不知道它是否更有效。我想这是因为它避免了加入。使用explain

测试此查询和您的查询
select *
from (
    select
        a, b,
        sum(c) over(partition by a, b) as sum
    from t
) s
where "sum" > 100