Maj*_*ati 9 sql postgresql select sum
我有一个表,其中有一个名为“容量”的数字列。我想选择第一行,其容量总和不大于 X, Sth 就像这个查询
select * from table where sum(capacity )<X
Run Code Online (Sandbox Code Playgroud)
但我知道我不能where部分使用聚合函数。那么还有什么其他方法可以解决这个问题呢?
这是一些示例数据
id| capacity
1 | 12
2 | 13.5
3 | 15
Run Code Online (Sandbox Code Playgroud)
我想按照 id 的顺序列出总和小于 26 的行,所以像这样的查询
select * from table where sum(capacity )<26 order by id
Run Code Online (Sandbox Code Playgroud)
它必须给我
id| capacity
1 | 12
2 | 13.5
Run Code Online (Sandbox Code Playgroud)
因为12+13.5<26
小智 10
聚会有点晚了,但为了将来的参考,以下内容应该适用于与OP类似的问题:
SELECT id, sum(capacity)
FROM table
GROUP BY id
HAVING sum(capacity) < 26
ORDER by id ASC;
Run Code Online (Sandbox Code Playgroud)
使用 PostgreSQL 文档来参考聚合函数:https://www.postgresql.org/docs/9.1/tutorial-agg.html
使用Having条款
select * from table order by id having sum(capacity)<X
Run Code Online (Sandbox Code Playgroud)
您可以使用 的窗口变体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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15862 次 |
| 最近记录: |