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

SQL查询中使用COALESCE:实现无成本记录默认值为0

解决方案

问题根源

你的原查询把product_costs.start_date < product_revenues.revenue_date放在了WHERE子句里,这会过滤掉LEFT JOIN后product_costs字段全为NULL的记录(比如收入ID1)——因为NULL和任何值比较都不成立,导致这些无对应成本的收入被排除在外。

修正后的SQL代码

SELECT 
    pr.id AS revenue_id,
    pr.revenue_date,
    pr.amount AS revenue_amount,
    COALESCE(SUM(pc.amount), 0) AS totalCost
FROM product_revenues pr
LEFT JOIN product_costs pc 
    ON pr.product_id = pc.product_id 
    AND pc.start_date < pr.revenue_date
GROUP BY pr.id, pr.revenue_date, pr.amount
ORDER BY pr.id;

核心调整点

  • 将成本日期的筛选条件移至LEFT JOIN的ON子句:这样LEFT JOIN会保留所有product_revenues的记录,无论是否存在符合条件的product_costs匹配项。
  • 使用COALESCE函数处理默认值:当某条收入没有对应的成本记录时,SUM(pc.amount)会返回NULL,COALESCE会自动将其替换为0,实现需求中的默认值设定。

预期结果

revenue_idrevenue_daterevenue_amounttotalCost
12023-01-011000
22023-02-0120050
32023-03-01300150

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:38:18