在Vertica的GROUP_CONCAT多个字段

问题描述 投票:0回答:3

我怎么可以这样做:

SELECT ID, Store, 
           GROUP_CONCAT(keyword::VARCHAR) OVER (PARTITION BY ID, Store ORDER BY num ASC) AS keywords, 
           GROUP_CONCAT(url::VARCHAR) OVER (PARTITION BY ID, Store ORDER BY num ASC) AS urls 
FROM table_name 

我收到以下错误,当我运行上面的查询:

在SELECT列表不能指定一个以上的用户定义的转换功能

我想MySQL GROUP_CONCAT multiple fields但是,似乎是一个MySQL的事情。我也相信GROUP_CONCAT是Vertica的7.1.x不再支持,所以如果有更好的方式来做到这一点,我是持开放的态度。

sql vertica
3个回答
1
投票

由于错误状态,你只能有一个单一的select语句UDTF,所以要解决这个问题,你可以查询分裂成两个子查询,并加入他们在一起。

SELECT x.ID, x.Store, x.keywords, y.urls
FROM (
        SELECT
                ID,
                Store, 
                GROUP_CONCAT(keyword::VARCHAR) OVER (PARTITION BY ID, Store ORDER BY num ASC) AS keywords
        FROM table_name
) x
JOIN (
        SELECT
                ID, 
                GROUP_CONCAT(url::VARCHAR) OVER (PARTITION BY ID, Store ORDER BY num ASC) AS urls
        FROM table_name
) y
        ON x.ID = y.ID
;

这将单独评估与自己GROUP_CONCAT功能每个查询,然后它们连接在一起。


0
投票

您可以在GROUP_CONCAT找到Vertica github strings package。你应该可以,如果你的VSQL路径树立正确的,只是makemake install

另一种替代方法是使用被包括在示例目录agg_concatenate。你不得不欺骗的SQL一点点得到的串联顺序正确,虽然。你可以看到如何做到这一点在这个stackoverflow answer例子。


-1
投票

您将需要处理的关键字和URL的改造在一个单独的CTE,并通过与GROUP_CONCAT通过这个...

    With cte_table_name AS (
    SELECT 
        ID
        ,Store
        ,keyword::VARCHAR AS keywords
        ,url::VARCHAR AS urls 
    FROM table_name 
   )
SELECT 
    t.ID    
    ,t.Store 
    ,GROUP_CONCAT(c.keyword) OVER (PARTITION BY t.ID, t.Store ORDER BY num ASC) AS keywords 
    ,GROUP_CONCAT(c.url) OVER (PARTITION BY t.ID, t.Store ORDER BY num ASC) AS urls 
FROM 
    table_name t
JOIN 
    cte_table_name c
    ON c.ID = t.ID
    AND c.Store = t.Score
© www.soinside.com 2019 - 2024. All rights reserved.