java - 如何在 jooq 中进行 select max 语句
问题描述
我想将以下 SQL 语句翻译成 jooq 语法:
select max(table.column) from table group by table.anothercolumn
我试过了:
dsl.select(table.colum, max())
和DSL.select(table.colum, max())
和dsl.select(table.colum.max())
和DSL.select(table.colum.max())
但根据 Eclipse,这些语法都是不正确的......
任何帮助将不胜感激。
解决方案
开始使用 jOOQ 时最常见的错误是:
没有代码生成
jOOQ 手册和其他 Stack Overflow 问题中的大多数示例都假设您正在使用jOOQ 的代码生成器对架构进行逆向工程。这意味着您将在生成的类中生成像table
(更有可能TABLE
)这样的对象。
您将需要静态导入所有这些对象,例如使用
import static com.example.generated.Tables.*;
现在,您可以引用静态导入的所有表格,以及表格中的列
没有静态导入DSL.*
最有效地使用 jOOQ 的另一个先决条件是从以下位置静态导入所有方法DSL
:
import static org.jooq.impl.DSL.*;
这将允许您使用不合格的max(Field)
聚合函数。
这两个先决条件都记录在手册中有关如何阅读手册的部分中。它们都是可选的,您可以在没有这些静态导入的情况下使用 jOOQ 并始终完全限定您的表达式。
工作示例
设置代码生成和静态导入后,以下查询将起作用:
DSLContext dsl = DSL.using(connection, dialect);
Result<?> result =
dsl.select(max(TABLE.COLUMN))
.from(TABLE)
.groupBy(TABLE.ANOTHERCOLUMN)
.fetch();
按 table.anothercolumn 从表组中选择 max(table.column)
推荐阅读
- python - 如何在 Pandas 中更新 fsspec
- python - 使用opencv python从视频中检测图像时如何忽略背景?
- python - 如何使用烧瓶使您的网站文本变成蓝色?
- angular - 解释为什么使用 Subject RXJS 测试失败而使用 BehaviourSubject 测试成功
- vue.js - Vue.js 使用自定义类型的两种方式绑定
- javascript - 带有 ESCPOS 库的土耳其字符不起作用
- python - 给定任何纬度,经度。坐标,在列表中找到最近坐标的最快方法是什么?
- cassandra - PerSSTableIndexWriter.java:211 - 拒绝列有效负载的值(分析为假)
- alpacajs - 日期时间字段在 Alpaca.js 中不起作用
- docker - 配置 docker 容器以访问互联网和其他 docker 容器