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

在Kotlin Exposed聚合函数中为PostgreSQL字段配置Coalesce

如何在Exposed查询中为可空字段添加COALESCE聚合处理

你的目标SQL中,针对可空字段ventas.importeadicional使用了SUM(COALESCE(...))来避免null值干扰聚合计算,要在Exposed中实现这一点,需要用到Exposed内置的coalesce函数,结合聚合函数sum()处理即可。

修改后的完整代码

val totalSellsAlias = Sells.id.count().alias("numSells")
val totalPeopleAlias = Sells.people.sum().alias("numPeople")
// 处理totalSellAmount:先对可空字段做COALESCE再求和,避免null导致计算结果异常
val totalSellsAmountAlias = (
    Sells.importing.sum()
        .minus(coalesce(Sells.additionalImporting, 0.0).sum())
).alias("totalSellAmount") 

// 处理totalTip:对可空字段替换null为0.0后再求和
val totalTipAlias = coalesce(Sells.additionalImporting, 0.0).sum().alias("totalTip")
    
Sells
    .innerJoin(Users, { Users.id }, { Sells.seller })
    .slice(
        Users.id, Users.name, Users.lastName, totalSellsAlias,
        totalPeopleAlias, totalSellsAmountAlias, totalTipAlias
    )
    .select { 
        Sells.dateRegistry.between(initialDate, endDate) and (Sells.financeStat.eq(13))
    }
    .groupBy(Users.id, Users.name, Users.lastName)
    .orderBy(totalSellsAmountAlias, SortOrder.DESC)

关键说明

  • Exposed的coalesce函数对应SQL中的COALESCE,作用是当第一个参数(可空列)为null时,返回第二个参数的默认值(这里指定为0.0)
  • 必须先对Sells.additionalImporting应用coalesce,再调用sum(),这样每条null记录都会被替换为0.0后参与求和,避免整个聚合结果变为null
  • 保持groupBy和orderBy逻辑不变,最终生成的SQL会与你提供的目标语句完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:32:17