MySQL中如何使用GROUP BY连接字符串?

发布于 2024-07-07 11:05:14 字数 157 浏览 6 评论 0原文

基本上问题是如何从 this:

foo_id   foo_name
1        A
1        B
2        C

到 this:

foo_id   foo_name
1        A B
2        C

Basically the question is how to get from this:

foo_id   foo_name
1        A
1        B
2        C

to this:

foo_id   foo_name
1        A B
2        C

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

时光沙漏 2024-07-14 11:05:14
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;

https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat

From the link above, GROUP_CONCAT: This function returns a string result with the concatenated non-NULL values from a group. It returns NULL if there are no non-NULL values.

耳钉梦 2024-07-14 11:05:14
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

更多详细信息请参见此处

从上面的链接中,GROUP_CONCAT:此函数返回一个字符串结果,其中包含来自组的串联非 NULL 值。 如果没有非 NULL 值,则返回 NULL。

SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

More details here.

From the link above, GROUP_CONCAT: This function returns a string result with the concatenated non-NULL values from a group. It returns NULL if there are no non-NULL values.

分開簡單 2024-07-14 11:05:14
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

:-
在MySQL中,您可以获得表达式组合的串联值
。 要消除重复值,请使用DISTINCT子句。 要对结果中的值进行排序,请使用 ORDER BY 子句。 要按倒序排序,请将DESC(降序)关键字添加到 ORDER BY 子句中作为排序依据的列的名称中。 默认为升序; 这可以使用 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;
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

:-
In MySQL, you can get the concatenated values of expression combinations
. To eliminate duplicate values, use the DISTINCT clause. To sort values in the result, use the ORDER BY clause. To sort in reverse order, add the DESC (descending) keyword to the name of the column you are sorting by in the ORDER BY clause. The default is ascending order; this may be specified explicitly using the ASC keyword. The default separator between values in a group is comma (“,”). To specify a separator explicitly, use SEPARATOR followed by the string literal value that should be inserted between group values. To eliminate the separator altogether, specify SEPARATOR ''.

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

OR

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;
じ违心 2024-07-14 11:05:14

结果被截断为 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

The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024 characters, so we first do:

SET group_concat_max_len=100000000;

and then, for example:

SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id
我早已燃尽 2024-07-14 11:05:14
SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id

会给你一个逗号分隔的字符串

SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id

Will give you a comma-delimited string

旧伤还要旧人安 2024-07-14 11:05:14

很好的答案。
我还遇到了 NULLS 问题,并设法通过在 GROUP_CONCAT 内部包含 COALESCE 来解决它。 示例如下:

SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ') 
FROM table 
GROUP BY id;

希望这对其他人有帮助

Great answers.
I also had a problem with NULLS and managed to solve it by including a COALESCE inside of the GROUP_CONCAT. Example as follows:

SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ') 
FROM table 
GROUP BY id;

Hope this helps someone else

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文