jOOQ在PostgreSQL中选择不同的数组聚合

时间:2017-09-19 05:22:01

标签: java sql postgresql jooq

我试图让jOOQ发出这个(没有太多运气):

SELECT array_agg(DISTINCT my_field) FROM ...

我最终使用了一个普通的SQL字段。

有没有办法做到这一点,我错过了?

如果没有,将.distinct()方法添加到Field可以与任何聚合函数一起使用是否有意义?或者创建一个Field而不是SelectStep的DSL.distinct(Field) - 不确定是否会产生影响。

这似乎是通过为每个聚合创建单独的DSL方法来实现的:countDistinctgroupConcatDistinctmin/max/sum/avgDistinct等。

由于

1 个答案:

答案 0 :(得分:1)

从jOOQ 3.10起可以使用DSL.arrayAggDistinct()功能: https://github.com/jOOQ/jOOQ/issues/6281

在此之前,只需使用plain SQL API作为解决方法:

public static <T> Field<T[]> arrayAggDistinct(Field<T> myField) {
    return DSL.field("array_agg(distinct {0})", myField.getArrayDataType(), myField);
}