基本上问题是如何从这个表格:
foo_id foo_name 1 A 1 B 2 C
转换成这个表格:
foo_id foo_name 1 A B 2 C
基本上问题是如何从这个表格:
foo_id foo_name 1 A 1 B 2 C
转换成这个表格:
foo_id foo_name 1 A B 2 C
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat
从上面的链接中,GROUP_CONCAT
:该函数返回一个字符串结果,其中包含组中连接的非NULL值。如果没有非NULL值,则返回NULL。SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
在MySQL中,您可以获取表达式组合的连接值。要消除重复值,请使用DISTINCT子句。要对结果中的值进行排序,请使用ORDER BY子句。要以相反的顺序排序,请在ORDER BY子句中按照您要排序的列的名称添加DESC(降序)关键字。默认是升序;可以使用ASC关键字明确指定。在分组中值之间的默认分隔符是逗号(“,”)。要显式指定分隔符,请使用SEPARATOR后跟应插入在组值之间的字符串文本值。为了完全消除分隔符,请指定SEPARATOR ''。GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
或者
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
结果被截断为由group_concat_max_len系统变量给出的最大长度,其默认值为1024个字符,因此我们首先执行以下操作:
SET group_concat_max_len=100000000;
然后,例如:
SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id
group_concat_max_len
配置的作用范围是什么?仅限当前连接/会话,还是会影响其他客户端? - Frozen FlameSELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id
将会给你一个以逗号分隔的字符串。
好的答案。我也遇到了NULLS的问题,通过在GROUP_CONCAT内部包含COALESCE来解决它。示例如下:
SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ')
FROM table
GROUP BY id;
希望这能帮助其他人