如何在 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 对 Condition
和 Field<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))
下面给出了查询的要点,我能够 运行 在 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 对 Condition
和 Field<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))