You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中高效计算车辆里程的两类汇总值

PostgreSQL单表扫描实现按车辆统计两类里程总和

直接使用PostgreSQL原生的条件聚合(通过FILTER子句或CASE表达式),仅需一次表扫描即可完成两类里程的统计,完美适配数十万行的大数据场景:

最优实现(PostgreSQL原生)

利用FILTER子句实现更清晰的条件聚合,性能最优:

SELECT
  vehicle_id,
  SUM(mileage) AS total_mileage, -- 所有记录的里程总和
  SUM(mileage) FILTER (WHERE is_processed = false) AS unprocessed_mileage -- 仅未处理记录的里程总和
FROM mileage
GROUP BY vehicle_id;

兼容式写法(可选)

如果需要兼容其他SQL数据库,可使用CASE表达式替代FILTER:

SELECT
  vehicle_id,
  SUM(mileage) AS total_mileage,
  SUM(CASE WHEN is_processed = false THEN mileage ELSE 0 END) AS unprocessed_mileage
FROM mileage
GROUP BY vehicle_id;

性能优化建议

针对数十万行数据,可创建覆盖复合索引避免回表扫描,进一步提升查询速度:

CREATE INDEX idx_mileage_vehicle_processed ON mileage (vehicle_id, is_processed) INCLUDE (mileage);

该索引包含分组条件和聚合所需的字段,查询时直接从索引读取数据,无需访问主表。

内容的提问来源于stack exchange,提问作者Asen Georgiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:43:11