如何在JOOQ查询中同时返回列值总和与行数?
修改后的JOOQ查询代码(同时返回总和与行数)
直接在原查询的select语句中添加行数统计即可,以下是调整后的Kotlin代码:
val (totalAmount, rowCount) = db.select( // 保留原有的总和计算,将null结果转为0 DSL.coalesce(DSL.sum(AMOUNT), 0).cast(Long::class.java), // 新增行数统计,无匹配行时自动返回0 DSL.count().cast(Long::class.java) ) .from(this.innerJoin(ACCOUNT).on(ACCOUNT_ID.eq(ACCOUNT.ID))) .where(ACCOUNT.ACCOUNT_ID.eq(accId)) .awaitSingle() .let { it.value1() to it.value2() }
关键说明:
DSL.count()用于统计符合过滤条件的记录行数,无需额外处理空值——即使没有匹配结果,它也会返回0- 原有的
sum(AMOUNT)仍需coalesce转换:当无匹配行时sum会返回null,用coalesce将其转为0保证类型一致 - 通过解构声明
val (totalAmount, rowCount)可以直接获取两个结果值,简化后续业务逻辑
内容的提问来源于stack exchange,提问作者saffa_surfer
相关产品推荐
相关产品推荐

