H2 用户使用“WITHIN GROUP”定义的 ListAgg 函数

Posted

技术标签:

【中文标题】H2 用户使用“WITHIN GROUP”定义的 ListAgg 函数【英文标题】:H2 User defined ListAgg function using 'WITHIN GROUP' 【发布时间】:2016-10-12 08:06:30 【问题描述】:

感谢 *** 上的一个问题,我为我的 H2 DB 定义了一个自定义 ListAgg 聚合函数,它似乎工作正常。

但是我使用 ListAgg 函数的 SQL 语句看起来像这样:

SELECT LISTAGG(SOMECOLUMN, ';')
         WITHIN GROUP (ORDER BY SOMECOLUMN)
FROM SOMETABLE
WHERE SOMECOLUMN = 'someValue';

并且失败并出现“语法错误:预期的“BY””。 可能是因为他不理解 'WITHIN GROUP (ORDER BY SOMECOLUMN)' 表达式,并希望在 'GROUP' 之后出现 'BY'?!

这也可以教他吗?

【问题讨论】:

为什么不用内置的GROUP_CONCAT()h2database.com/html/functions.html#group_concat 无名之马:我们在生产中使用 Oracle(它不知道 group_concat),只是希望能够针对 H2 数据库运行我们的测试 在生产环境中使用不同的 DBMS 进行测试是个坏主意。这只是为什么会这样的一个例子 没有名字的马:你说得对,但在我们的环境中,atm/尚未考虑这种设置 【参考方案1】:

我找到了将 h2 数据库版本更新到最新版本的解决方案。

感谢对此答案的评论:H2 User defined aggregate function, ListAgg, can't use DISTINCT or TRIM() on the first parameter

从版本 1.4.198 (2019-02-22) 开始,H2 实现了 列表 - 见changelog。它被描述为“部分”,但示例 在文档中至少包括 LISTAGG(NAME, ', ') WITHIN GROUP (ORDER BY ID) 和 LISTAGG(ID, ', ') WITHIN GROUP (ORDER BY ID) OVER (ORDER BY ID) – Andrew Spencer 2019 年 6 月 21 日 13:13

【讨论】:

以上是关于H2 用户使用“WITHIN GROUP”定义的 ListAgg 函数的主要内容,如果未能解决你的问题,请参考以下文章

oracle的 listagg() WITHIN GROUP ()函数使用

oracle的 listagg() WITHIN GROUP ()函数使用

Oracle的 listagg() WITHIN GROUP ()函数使用

oracle的 listagg() WITHIN GROUP () 行转列函数的使用

瀚高数据库实现oracle listagg() ... within group(order by )

r 来自https://stackoverflow.com/questions/25314336/extract-the-maximum-value-within-each-group-in-a-da