在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
相关产品推荐
相关产品推荐

