如何在jOOQ中对数字参数指定的列实现降序排序?
解决方案
要实现按第1列和第3列降序排序,你可以通过以下两种方式修改orderBy部分:
方法1:使用field()指定位置并调用desc()
直接通过field(int)获取对应位置的字段,再调用desc()方法设置降序:
.orderBy(field(1).desc(), field(3).desc())
方法2:使用DSL.sort()指定排序规则(jOOQ 3.11+支持)
通过DSL.sort()方法同时指定列位置和排序方向:
.orderBy(DSL.sort(1, SortOrder.DESC), DSL.sort(3, SortOrder.DESC))
修改后的完整代码
Predictions p = PREDICTIONS.as("p"); Banks b = BANKS.as("b"); List<Prediction> list = context .select(inline(1).as("SELECTED"), p.EXEC_ID, p.DATASET_NAME, p.DATE_TIME) .from(p) .join(b) .on(b.SK.eq(p.BANK_SK)) .where(p.EXEC_ID.in(execIds)) .unionAll(context .select(inline(0).as("SELECTED"), p.EXEC_ID, p.DATASET_NAME, p.DATE_TIME) .from(p) .join(b) .on(b.SK.eq(p.BANK_SK)) .where(p.EXEC_ID.notIn(execIds))) .orderBy(field(1).desc(), field(3).desc()) // 替换为上述任意一种写法即可 .fetch() .into(Prediction.class);
说明:原代码里的orderBy(1,3)用的是按列位置默认升序的重载方法,没法直接指定排序方向;以上两种写法都能为每个目标列单独设置降序规则,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者ps0604
相关产品推荐
相关产品推荐

