我该怎么做:
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,所以如果有更好的方法可以做到这一点,我对此持开放态度。
答案 0 :(得分: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
函数评估每个查询,然后将它们结合在一起。
答案 1 :(得分:0)
您可以在Vertica github strings package找到GROUP_CONCAT
。如果你的vsql路径设置正确,你应该只能make
和make install
。
另一种方法是使用examples目录中包含的agg_concatenate
。但是,您必须稍微调整sql以使串联中的顺序正确。您可以在此stackoverflow answer中查看如何执行此操作的示例。
答案 2 :(得分:-1)
您将需要以合理的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