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

如何合并两个SQL查询以统计各支付方式的使用次数

问题根因

你的SQL中JOIN的关联条件缺失,触发了笛卡尔积(交叉连接),导致统计结果异常:
你写的JOIN orders ON payment_method_id没有指定两个表的关联字段匹配规则,等价于只要payment_method_id字段不为空就匹配,最终每个支付方式都会和所有订单行做交叉关联,所以统计出来的数量全都是订单表的总条数,和支付方式没有对应关系。

正确实现方案

场景1:仅返回有使用记录的支付方式

如果不需要展示从未被使用的支付方式,用内连接即可:

SELECT 
    pm.name,
    COUNT(o.id) AS order_count
FROM payment_method pm
INNER JOIN orders o
    ON pm.id = o.payment_method_id
GROUP BY pm.id, pm.name;

分组时额外加上pm.id是为了避免出现同名支付方式时统计结果出错,更符合业务逻辑。

场景2:返回所有支付方式(未使用的显示次数为0)

如果需要把从未产生过订单的支付方式也列出来,就用左连接,同时调整统计逻辑:

SELECT 
    pm.name,
    COUNT(o.id) AS order_count
FROM payment_method pm
LEFT JOIN orders o
    ON pm.id = o.payment_method_id
GROUP BY pm.id, pm.name;

可选拓展:仅统计支付完成的订单

如果需要过滤掉未完成支付的订单,可以加对应条件:

SELECT 
    pm.name,
    COUNT(o.id) AS order_count
FROM payment_method pm
LEFT JOIN orders o
    ON pm.id = o.payment_method_id
    AND o.payment_completed_date IS NOT NULL
GROUP BY pm.id, pm.name;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:36:03