Mysql - 基于字段值的Concat字段

时间:2018-02-27 00:20:40

标签: mysql concatenation

给出一个这样的表:

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,则它不应执行任何操作。

1 个答案:

答案 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)

之类的东西来解决