简体   繁体   English

如果条件在JOOQ的总和之内

[英]IF Condition Within Sum in JOOQ

MySQL allows me to run the following query: MySQL允许我运行以下查询:

SELECT SUM(IF(COLUMN1 > COLUMN2, COLUMN2, COLUMN1)), SUM(IF(COLUMN3 = 0,4 ,10)) FROM TABLE;

How can I do this in JOOQ ? 我如何在JOOQ做到这一点?

I'm assuming you're referring to MySQL's IF() function, which is currently not supported by jOOQ, simply because if is a reserved keyword in Java, so there's no 1:1 mapping to a Java method for this function. 我假设您所指的是MySQL的IF()函数,jOOQ当前不支持该函数,这仅仅是因为if是Java中的保留关键字,因此该函数没有1:1映射到Java方法。

But as you can also see in MySQL's documentation, you can very easily rewrite IF() to the more standard CASE expression. 但是,正如您还可以在MySQL文档中看到的那样,您可以轻松地将IF()重写为更标准的CASE表达式。 So, your query would be this one in SQL: 因此,您的查询将是SQL中的查询:

SELECT 
  SUM (CASE WHEN COLUMN1 > COLUMN2 THEN COLUMN2 ELSE COLUMN1 END), 
  SUM (CASE WHEN COLUMN3 = 0 THEN 4 ELSE 10 END)
FROM TABLE

Which translates to jOOQ as follows: 转换为jOOQ如下:

using(configuration)
  .select(sum(when(TABLE.COLUMN1.gt(TABLE.COLUMN2), TABLE.COLUMN2)
             .otherwise(TABLE.COLUMN1)),
          sum(when(TABLE.COLUMN3.eq(0), 4).otherwise(10)))
  .from(TABLE)
  .fetch();

See the jOOQ manual's section about the CASE expression for details . 有关详细信息,请参见jOOQ手册中有关CASE表达式的部分

As always, this static import is implied: 一如往常,此静态导入是隐式的:

import static org.jooq.impl.DSL.*;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM