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 函数的主要内容,如果未能解决你的问题,请参考以下文章