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

PostgreSQL中如何计算两张不同表查询结果的总和?

问题:正确计算两张表统计结果的总和

我有两个查询语句,分别从两张不同的表中返回已完成的发行(issuances)和赎回(redemptions)的总数:

统计发行数(结果约18k):

select
  count(*)
from
  issuances_extended
WHERE
  status = 'completed'

统计赎回数(结果约7k):

select
  count(*)
from
  redemptions_extended
WHERE
  status = 'completed'

尝试用以下语句计算两者总和,但返回结果为2,统计错误:

with active_user as (
  select
    count(*) as issuance_count
  from
    issuances_extended
  where
    status = 'completed'
  UNION ALL
  select
    count(*) as redemption_count
  from
    redemptions_extended
  where
    status = 'completed'
  )
  select
    count(*)
  from
    active_user

错误原因

你的CTE通过UNION ALL返回了两行数据(一行是发行统计数,一行是赎回统计数),最后执行count(*)是统计行数,所以得到结果2,而非两个数值的总和。

正确做法

方法1:直接子查询相加

SELECT
  (SELECT count(*) FROM issuances_extended WHERE status = 'completed')
  +
  (SELECT count(*) FROM redemptions_extended WHERE status = 'completed') AS total;

方法2:CTE求和

调整CTE的字段名保持一致,最后对数值求和:

WITH stats AS (
  SELECT count(*) AS total_num FROM issuances_extended WHERE status = 'completed'
  UNION ALL
  SELECT count(*) AS total_num FROM redemptions_extended WHERE status = 'completed'
)
SELECT SUM(total_num) AS overall_total FROM stats;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:15:54