gpt4 book ai didi

java - postgresql 中的 jOOQ 聚合函数

转载 作者:行者123 更新时间:2023-11-30 03:00:22 27 4
gpt4 key购买 nike

PostgreSQL 9.4.5jOOQ 3.7.2方言设置为 POSTGRES_9_4

我正在尝试使用 jOOQ 来包装替换这个 native postgresql 聚合表达式:

array_agg(row_to_json(foo) order by "foo"."name"asc) 过滤器(其中“attribute”.name 不为空)

jOOQ DSL 看起来应该可以使用以下代码工作:

arrayAgg(rowToJson(FOO)).orderBy(FOO.NAME).filterWhere(FOO.NAME.isNotNull()))

其中 rowToJson 是 postgres 函数的包装器。呈现的 SQL 是这样的:

array_agg(row_to_json(foo) 按“foo”排序。“name”asc)

目前我正在解决这个问题:

public static <T> Field<T[]> arrayAgg(Field<T> field, final SortField<?> sort, final Condition filter) {
return field("array_agg({0} order by {1}) filter (where {2})", field.getDataType().getArrayDataType(), field, sort, filter);
}

问题是,第一个代码可以工作吗?如果不是,在 jOOQ 中生成这个聚合函数的正确方法是什么?

最佳答案

这是 jOOQ ( #5158 ) 中的一个错误,将在下一版本中修复。

我能想到两种解决方法:

  • 您自己建议的方法:使用纯 SQL 正确地重新实现功能。
  • 通过使用 CASE 模拟 FILTER:

    arrayRemove(
    arrayAgg(when(FOO.NAME.isNotNull(), rowToJson(FOO))).orderBy(FOO.NAME))
    , null
    )

    参见PostgresDSL.arrayRemove()

关于java - postgresql 中的 jOOQ 聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36161143/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com