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

如何用MySQL关联两张表查询客户未完全结清订单详情?

查询指定客户未完全结清订单的SQL方案

需求拆解

要获取客户ID为50的所有未结清订单,需满足:

  • 包含无支付记录的订单
  • 计算未结金额(订单总金额 - 已支付的有效金额)
  • 输出字段:order_id、order_total、client_id、outstanding

最终SQL语句

SELECT
    o.order_id,
    o.order_total,
    o.client_id,
    o.order_total - COALESCE(SUM(CASE WHEN op.payment_status = 'paid' THEN op.payment_amount ELSE 0 END), 0) AS outstanding
FROM
    orders o
LEFT JOIN
    order_payments op ON o.order_id = op.order_id
WHERE
    o.client_id = 50
GROUP BY
    o.order_id, o.order_total, o.client_id
HAVING
    o.order_total - COALESCE(SUM(CASE WHEN op.payment_status = 'paid' THEN op.payment_amount ELSE 0 END), 0) > 0;

语句说明

  • LEFT JOIN:确保即使订单没有支付记录(无匹配的order_payments行),也能被纳入结果,符合“无支付记录视为未结清”的要求。
  • CASE + SUM:只统计支付状态为paid的金额,忽略open状态的未完成支付。
  • COALESCE:处理无支付记录的场景,将SUM返回的NULL转为0,避免计算时出现NULL值。
  • GROUP BY:按订单维度聚合,确保每个订单只返回一行结果。
  • HAVING:过滤掉已完全结清(未结金额为0)的订单,只保留未结清的记录。

这段语句适配MySQL、PostgreSQL等主流关系型数据库,无需额外修改即可运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:45:34