给出一个这样的表:
id name field
1 walt a
2 hurley b
3 jack c
4 kate a
5 sawyer a
6 john a
7 ben b
8 miles null
9 juliet c
10 jacob d
11 richard null
你将如何将其转移到此:
id ids names field
1 1,4,5,6 walt, kate, sawyer, john a
2 2,7 hurley, ben b
3 8 miles null
4 3,9 jack, juliet c
5 10 jacob d
6 11 richard null
需要查看具有相同字段值的所有行。然后,它需要根据字段值的相等性“合并”所有其他值。但是,如果字段值为null,则它不应执行任何操作。
答案 0 :(得分:2)
GROUP_CONCAT可用于将来自不同行的数据聚合成连接的字符串(顾名思义);它还支持它自己的ORDER BY子句,所以你要双倍确定相应的值最终会在列表的相同位置*。
SELECT MIN(id)
, GROUP_CONCAT(id ORDER BY id)
, GROUP_CONCAT(name ORDER BY id)
, field
FROM theTable
WHERE field IS NOT NULL
GROUP BY field
UNION
SELECT id, id, name, field
FROM theTable
WHERE field IS NULL
;
*聚合函数忽略NULL值,因此从技术上讲,如果id或name包含NULL,则列表将变为未对齐;这可以用GROUP_CONCAT(IFNULL(concatenated_value, '[null]') ORDER BY ordering_value)