【问题标题】:How to use SUM inside COALESCE in JOOQ如何在 JOOQ 的 COALESCE 中使用 SUM
【发布时间】:2021-02-20 20:24:38
【问题描述】:

下面给出了查询的要点,我可以在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() 部分,非常感谢一些帮助。

【问题讨论】:

  • 嗨@roshan,我也面临同样的问题。请告诉我你是如何在 JOOQ 中使用与 sum 合并的。

标签: java jooq mysql-5.6


【解决方案1】:

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))

【讨论】:

  • 非常感谢@Lukas,原来FILTER 正是我想要的。
猜你喜欢
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2014-10-08
  • 2012-08-05
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多