gpt4 book ai didi

java - JOOQ 中的 CASE 表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:00 24 4
gpt4 key购买 nike

如何在 JOOQ 中编写以下 SQL?

SELECT COUNT(*) as total, 
SUM(CASE WHEN (in_kind OR goods) THEN 1 ELSE 0 END) AS alt_donation
FROM donation

所有三列(“not_found”、“in_kind”和“goods”)都是 boolean 值。

我查看了其他相关问题和JOOQ CASE Documentation并且可以让下面的sql在JOOQ中运行。

SELECT COUNT(*) AS total, 
SUM(CASE WHEN (not_found) THEN 0 ELSE 1 END) AS alt_donation
FROM donation

JOOQ 版本在此示例中正确运行:

val query = dslContext
.select(DSL.count().`as`("donations"),
DSL.sum(DSL.choose(DONATION.NOT_FOUND).`when`(true, 0).otherwise(1)).`as`("altdonation"))
.from(DONATION)

我需要使用之前在 CASE 中使用“或”的 sql 语句。

最佳答案

您可能会使用 FILTER (WHERE ..) clause ,它受 jOOQ 支持,并以与您类似的方式在本身不支持它的 SQL 方言中模拟:

在 SQL 中

SELECT COUNT(*) as total, 
COUNT(*) FILTER (WHERE in_kind OR goods) AS alt_donation
FROM donation

在 jOOQ 中

ctx.select(count().`as`("donations"),
count().filterWhere(condition(DONATION.IN_KIND)
.or(condition(DONATION.GOODS))).`as`("alt_donation"))
.from(DONATION)
.fetch();

注意我要转 Field<Boolean>进入Condition使用 DSL.condition(Field<Boolean>) ,这可能是您正在寻找的 API

关于java - JOOQ 中的 CASE 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53606041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com