首页 > 解决方案 > 如何将列与sql中具有相同名称的列连接起来?

问题描述

如何加入所有组并创建newcolumn文件名相同的自动生成列?

File Name |  Group
----------+---------
 Log.csv  |  1001
 Log.csv  |  1000
 Log.csv  |  1005
 blue.txt |  1001
 blue.txt |  1005 

预期结果:

File Name |  Group  | NewColumn
----------+---------+---------------
 Log.csv  |  1001   | 1001,1000,1005 
 Log.csv  |  1000   | 1001,1000,1005
 Log.csv  |  1005   | 1001,1000,1005
 Log.csv  |  1001   | 1001,1005
 Log.csv  |  1005   | 1001,1005

标签: mysql

解决方案


如果您使用的是 MySQL 8+ 或最新版本的 MariaDB,那么您可以GROUP_CONCAT在此处用作分析函数:

SELECT file_name, GROUP_CONCAT(`Group`) OVER (PARTITION BY file_name) AS NewColumn
FROM yourTable
ORDER BY file_name, `Group`;

在早期版本的 MySQL/MariaDB 上,我们可能不得不加入子查询作为替代方案:

SELECT t1.file_name, t2.NewColumn
FROM yourTable t1
INNER JOIN
(
    SELECT file_name, GROUP_CONCAT(`Group`) AS NewColumn
    FROM yourTable
    GROUP BY file_name
) t2
    ON t2.file_name = t1.file_name
ORDER BY
    t1.file_name,
    t1.`Group`;

推荐阅读