mysql中group_concat函数的替代



我需要为我的一个列设置一些逗号分隔的值:

Input :
id    status
1.    pause
1.    start
1.    running
2.    pause
3.    pause
Output:
id. status
1.  pause,start,running
2.  pause
3.  pause

我不想在这里使用group_concat函数,因为将来可能会使用另一种类型的数据库(sql/nosql)。谁能帮我用别的方法吗?

WITH RECURSIVE
cte1 AS (
SELECT id, status, 
ROW_NUMBER() OVER (PARTITION BY id) rn
FROM test
),
cte2 AS (
SELECT id, rn,
CAST(status AS CHAR(65535)) csv
FROM cte1
WHERE rn = 1
UNION ALL
SELECT cte1.id, cte1.rn,
CONCAT_WS(',', cte2.csv, cte1.status)
FROM cte2
JOIN cte1 ON cte1.id = cte2.id AND cte1.rn = cte2.rn + 1
),
cte3 AS (
SELECT id, csv, 
ROW_NUMBER() OVER (PARTITION BY id ORDER BY rn DESC) rn
FROM cte2
)
SELECT id, csv 
FROM cte3
WHERE rn = 1

https://dbfiddle.uk/?rdbms=mysql_8.0&小提琴= 0713 abe3711c98c91dd1ceadb533e968

另一个dbms在调整此查询时需要进行最小的更改。从WITH子句定义中删除RECURSIVE,用相应的函数替换CONCAT_WS()(或者如果status不可为空,可能使用常见的连接),在递归CTE中删除显式CAST或更改数据类型…

p。另一个dbms具有类似于MySQL中的GROUP_CONCAT()的功能,或者至少它们有一些特定的结构/方法来执行此类任务。

最新更新