PostgreSQL在where子句中使用sum

时间:2017-01-05 21:23:07

标签: sql postgresql select sum

我有一个表格,其中有一个名为' capacity'的数字列。我想选择容量总和不大于X的第一行,Sth就像这个查询

select * from table where sum(capacity )<X

但是我知道我不能在where部分使用聚合函数。那么这个问题还有其他什么方法呢?

以下是一些示例数据

id| capacity
1 | 12
2 | 13.5
3 | 15

我想用id的顺序列出其总和小于26的行,所以像这样的查询

 select * from table where sum(capacity )<26 order by id

它必须给我

id| capacity
1 | 12
2 | 13.5

因为12 + 13.5 <26

3 个答案:

答案 0 :(得分:3)

使用Having子句

    select * from table order by id having sum(capacity)<X

答案 1 :(得分:3)

您可以使用sum的窗口变量生成累积总和,然后在where子句中使用它。请注意,窗口函数不能直接放在where子句中,因此您需要子查询:

SELECT   id, capacity
FROM     (SELECT id, capacity, SUM(capacity) OVER (ORDER BY id ASC) AS cum_sum
          FROM   mytable) t
WHERE    cum_sum < 26
ORDER BY id ASC;

答案 2 :(得分:2)

聚会有点晚,但为了将来参考,以下内容应该适用于与 OP 类似的问题:

SELECT id, sum(capacity)
FROM table
GROUP BY id
HAVING sum(capacity) < 26
ORDER by id ASC;

使用 PostgreSQL 文档作为聚合函数的参考:this paper