给出下面的表mileage
,我应该对每个vehicle_id
执行两次求和:一次求和miles
的所有条目,另一次求和miles
的所有条目,仅其中is_processed = false
.
mileage
vehicle_id | miles | is_processed | created_at |
---|---|---|---|
773 | 800 | f | 2023-04-17 13:11:59.100846 |
767 | 200 | f | 2023-04-24 11:29:52.503024 |
767 | 100 | t | 2023-04-11 15:14:33.125348 |
773 | 200 | t | 2023-04-11 15:49:34.313639 |
767 | 150 | f | 2023-04-24 11:43:31.496871 |
使用以下两种方法中的一种,这将非常简单:
Method 1
select vehicle_id,
sum(miles) as total,
(select sum(miles) from mileage t2 where t1.vehicle_id = t2.vehicle_id and is_processed = false) extra
from mileage t1
group by vehicle_id;
Method 2
在我 Select 的语言中,获取所有记录并使用一个for
循环进行计算.
Desired solution
然而,我想知道是否有一种方法可以使用PostgreSQL来完成所有这些任务.我已经try 过窗口函数,但无法弄清楚,分组将涉及对同一个表的第二次扫描,这将损害性能,因为我预计要处理数十万行.
如有任何帮助,我们不胜感激.谢谢!