我有一个表格,其中有一个名为' 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
答案 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