在 Netezza 中使用 GROUP_CONCAT 时缺少 ORDER BY 的解决方法
Posted
技术标签:
【中文标题】在 Netezza 中使用 GROUP_CONCAT 时缺少 ORDER BY 的解决方法【英文标题】:Workaround of lacking of ORDER BY when using GROUP_CONCAT in Netezza 【发布时间】:2016-05-02 19:01:19 【问题描述】:在 Netezza 中,GROUP_CONCAT 函数不支持 ORDER BY,它使用自己的内部排序依据,即按照您用作参数的列排序。
SELECT 'GROUP BY '||TOOLKIT.SQLEXT.GROUP_CONCAT(PRIMARY_KEY, ', ') AS GROUP_BY
FROM (
SELECT 1 AS SEQ, 'DATA_DATE' AS PRIMARY_KEY
UNION ALL
SELECT 2 AS SEQ, 'ACCT_ID' AS PRIMARY_KEY
) S;
这将返回:
GROUP_BY 按 ACCT_ID、DATA_DATE 分组但是如何通过 SEQ 而不是 PRIMARY_KEY 获取结果顺序以获得这样的结果:
GROUP_BY GROUP BY DATA_DATE,ACCT_ID【问题讨论】:
【参考方案1】:我们可以在第一个 GROUP_CONCAT 参数的开头添加 SEQ 以强制内部 ORDER BY 为我们工作,然后删除我们添加的内容。为了安全删除,我们在序列的开头和结尾添加了额外的“@”。
SELECT 'GROUP BY '||TOOLKIT.SQLEXT.REGEXP_REPLACE(
TOOLKIT.SQLEXT.GROUP_CONCAT('@'||LPAD(SEQ, 4, '0')||'@'
||PRIMARY_KEY, ', '),
'@[0-9]4@', '') AS GROUP_BY
FROM (
SELECT 1 AS SEQ, 'DATA_DATE' AS PRIMARY_KEY
UNION ALL
SELECT 2 AS SEQ, 'ACCT_ID' AS PRIMARY_KEY
) S;
这将返回我们想要的:
GROUP_BY GROUP BY DATA_DATE,ACCT_ID【讨论】:
以上是关于在 Netezza 中使用 GROUP_CONCAT 时缺少 ORDER BY 的解决方法的主要内容,如果未能解决你的问题,请参考以下文章