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

如何统计上月订单支付方式?需保留未产生订单的支付方式

解决方案:显示所有支付方式(含未使用的)的上月使用频次

核心思路是以支付方式全量表作为查询主表,通过左关联订单数据,确保即使没有匹配的上月订单,支付方式记录也会被保留,频次统计为0。以下是适配不同表结构的示例:


示例1:订单与支付方式通过中间表关联

假设存在:

  • webshop_payment_methods:支付方式表(含id、payment_name、status等字段)
  • webshop_order_payments:订单-支付方式关联表(含order_id、payment_method_id)
  • webshop_orders:订单表(含id、created_at等字段)
SELECT 
    pm.id,
    pm.payment_name,
    COUNT(wop.order_id) AS usage_count
FROM webshop_payment_methods pm
LEFT JOIN webshop_order_payments wop 
    ON pm.id = wop.payment_method_id
LEFT JOIN webshop_orders wo 
    ON wop.order_id = wo.id 
    AND DATE(wo.created_at) > CURDATE() - INTERVAL 1 MONTH -- 时间条件放在JOIN的ON中,避免过滤无订单的支付方式
WHERE pm.status = 1 -- 过滤启用状态的支付方式,可按需调整
GROUP BY pm.id, pm.payment_name
ORDER BY usage_count DESC, pm.payment_name ASC;

示例2:订单表直接包含支付方式字段

如果订单表webshop_orders自带payment_method_id字段,可简化为:

SELECT 
    pm.id,
    pm.payment_name,
    COUNT(wo.id) AS usage_count
FROM webshop_payment_methods pm
LEFT JOIN webshop_orders wo 
    ON pm.id = wo.payment_method_id
    AND DATE(wo.created_at) > CURDATE() - INTERVAL 1 MONTH
WHERE pm.status = 1
GROUP BY pm.id, pm.payment_name
ORDER BY usage_count DESC;

关键逻辑说明

  • 主表选择:以支付方式表作为主表,确保所有存在的支付方式都会被查询到。
  • 条件位置:将上月订单的时间条件放在LEFT JOIN的ON子句中,而非WHERE子句——若放在WHERE里,会过滤掉左关联后订单字段为NULL的记录,等同于内联查询,丢失未使用的支付方式。
  • 频次统计:使用COUNT(关联的订单ID字段)而非COUNT(*),因为左关联后无匹配订单的记录中,关联字段为NULL,COUNT()会忽略NULL值,统计结果为0,正好对应未使用的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:26