如何在 JOOQ 的 COALESCE 中使用 SUM

How to use SUM inside COALESCE in JOOQ

下面给出了查询的要点,我能够 运行 在 MySQL

中成功
SELECT a.*, 
COALESCE(SUM(condition1 or condition2), 0) as countColumn
FROM table a 
-- left joins with multiple tables
GROUP BY a.id;

现在,我正在尝试将它与 JOOQ 一起使用。

ctx.select(a.asterisk(),                
            coalesce(sum("How to get this ?")).as("columnCount"))
            .from(a)
            .leftJoin(b).on(someCondition)
            .leftJoin(c).on(someCondition))
            .leftJoin(d).on(someCondition)
            .leftJoin(e).on(someCondition)
            .groupBy(a.ID);     

我在准备 coalesce() 部分时遇到了困难,非常感谢您的帮助。

jOOQ 的 API 对 ConditionField<Boolean> 之间的区别更加严格,这意味着你不能像 MySQL 中那样简单地将布尔值视为数字。明确数据类型以防止边缘情况通常不是一个坏主意,因此这种严格性不一定是坏事。

因此,您可以按如下方式将布尔值转换为整数:

coalesce(
  sum(
    when(condition1.or(condition2), inline(1))
    .else_(inline(0))
  ), 
  inline(0)
)

但更好的是,为什么不使用 standard SQL FILTER clause,它可以在 MySQL 中使用 COUNT(CASE ...) 聚合函数模拟:

count().filterWhere(condition1.or(condition2))