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

Postgres中如何跨多个相同表实现求和与分组查询?

解决方案:用UNION ALL合并表后直接聚合

你需要的是用UNION ALL将三个表的所有记录合并成一个逻辑上的单一数据集,然后直接对这个合并后的数据集进行分组求和,这比你之前的方法更简洁高效,也更易扩展。

具体查询语句

SELECT user_id, SUM(amount) AS total_amount
FROM (
    SELECT user_id, amount FROM purchases1
    UNION ALL
    SELECT user_id, amount FROM purchases2
    UNION ALL
    SELECT user_id, amount FROM purchases3
) AS combined_purchases
GROUP BY user_id;

为什么这比你的原方法更好?

  • 更简洁:不需要先对每个表单独聚合,再在外层二次求和,逻辑更直接。
  • 性能更优:UNION ALL不会像UNION那样做去重操作(你的场景里不同表的购买记录都是独立的,不需要去重),减少了不必要的计算开销。
  • 扩展性强:如果后续增加更多同结构的表(比如purchases4、purchases5),只需要在子查询里继续添加UNION ALL SELECT user_id, amount FROM purchasesN即可,维护成本低。

补充优化方案

如果你的数据库支持(比如PostgreSQL、MySQL 8.0+),可以创建一个视图来封装三个表的合并逻辑,之后查询视图就像查询单个表一样:

CREATE VIEW all_purchases AS
SELECT user_id, amount FROM purchases1
UNION ALL
SELECT user_id, amount FROM purchases2
UNION ALL
SELECT user_id, amount FROM purchases3;

之后查询总金额就可以简化为:

SELECT user_id, SUM(amount) AS total_amount
FROM all_purchases
GROUP BY user_id;

这样如果后续表有增减,只需要修改视图定义,不需要修改每个聚合查询。

内容的提问来源于stack exchange,提问作者Cloud Artisans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:40:23