我怎么可以这样做:
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不再支持,所以如果有更好的方式来做到这一点,我是持开放的态度。
由于错误状态,你只能有一个单一的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
功能每个查询,然后它们连接在一起。
您可以在GROUP_CONCAT
找到Vertica github strings package。你应该可以,如果你的VSQL路径树立正确的,只是make
和make install
。
另一种替代方法是使用被包括在示例目录agg_concatenate
。你不得不欺骗的SQL一点点得到的串联顺序正确,虽然。你可以看到如何做到这一点在这个stackoverflow answer例子。
您将需要处理的关键字和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