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

如何在无匹配booking记录时返回0计算bookings/clicks(按广告主、日期、名称)

解决方案

要实现你的需求,核心是将原来的inner join改为**左连接(left join)**以保留所有click记录,同时处理无对应booking时的空值问题。修改后的SQL如下:

select 
    c.name, 
    c.advertiser_id, 
    -- 当无对应booking时,将bookings视为0,同时避免除数为0
    coalesce(max(b.bookings), 0) / nullif(max(c.clicks), 0) as booking_click_ratio,
    c.on_date
from click c
left join booking b 
    on c.advertiser_id = b.advertiser_id 
    and c.name = b.name 
    and c.on_date = b.on_date
group by c.name, c.advertiser_id, c.on_date

关键修改说明

  • 替换连接类型:把inner join换成left join,以click表作为主表,这样所有click表的记录都会被保留,即使没有匹配的booking条目。
  • 处理空值:使用coalesce(max(b.bookings), 0),当没有匹配的booking时,max(b.bookings)会返回null,coalesce会将其替换为0,确保比值计算结果为0。
  • 避免除数为0报错:添加nullif(max(c.clicks), 0),如果某个click记录的clicks为0,会将除数转为null,避免出现除以0的错误(如果你的业务中clicks不会为0,这部分可以省略)。
  • 统一字段来源:select和group by中的字段都从click表(别名c)获取,避免因booking无匹配导致字段值为null。

示例验证

用你提供的测试数据执行上述SQL,会得到你期望的结果:

name advertiser_id booking_click_ratio on_date
uk   12            1.0000              2018-05-01
us   12            1.0000              2018-05-01
us   12            0.0000              2018-05-02

其中us 2018-05-02这条click记录因为没有对应的booking,计算时bookings被视为0,最终比值为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:07:35