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

SQL如何在WHERE语句中统计行数?SQL Server两表关联支付记录数查询问题

SQL Server订单关联支付统计实现方案

方案1:新增子查询(简单直接,适合小数据量)

直接在你现有查询的基础上,再加一个计算同payment_id总行数的标量子查询即可:

select 
    o.*, 
    -- 满足is_pay=1的行数
    (select count(1) from payment p 
     where p.payment_id = o.payment_id and p.is_pay = 1) as payed_count,
    -- 同payment_id对应的总行数
    (select count(1) from payment p 
     where p.payment_id = o.payment_id) as total_payment_count
from 
    [order] o

注意:order是SQL Server的保留关键字,作为表名使用时建议加方括号[]包裹避免语法报错。

方案2:预聚合后关联(推荐,性能更优)

如果数据量较大,多次子查询会重复扫描payment表,推荐先对payment表按payment_id分组预计算两个统计值,再和order表关联,只需扫描一次payment表:

select 
    o.*,
    isnull(p.payed_count, 0) as payed_count,
    isnull(p.total_payment_count, 0) as total_payment_count
from [order] o
left join (
    select 
        payment_id,
        sum(case when is_pay = 1 then 1 else 0 end) as payed_count,
        count(*) as total_payment_count
    from payment
    group by payment_id
) p on o.payment_id = p.payment_id

该方案还兼容payment表中不存在对应payment_id的场景,用isnull将空值转为0,避免返回null统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:00:03