搜索
您的当前位置:首页正文

Mysql的GROUP_CONCAT()函数使用方法

2023-11-29 来源:莱芜美食

语法: GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name ...]][SEPARATOR str_val]) 下面演示一下这个函数,先建立一个学生选课表student_courses,并填充一些测试数据。 SQL代码 代码如下:CREATE TABLE student_courses (          student_id INT UNSIGNED NOT NULL,          courses_id INT UNSIGNED NOT NULL,          KEY(student_id)      );      INSERT INTO student_courses VALUES (1, 1), (1, 2), (2, 3), (2, 4), (2, 5);    若要查找学生ID为2所选的课程,则使用下面这条SQL: SQL代码  代码如下:mysql> SELECT student_id, courses_id FROM student_courses WHERE student_id=2;      +------------+------------+      | student_id | courses_id |      +------------+------------+      |          2 |          3 |      |          2 |          4 |      |          2 |          5 |      +------------+------------+      3 rows IN SET (0.00 sec)    输出结果有3条记录,说明学生ID为2的学生选了3、4、5这3门课程。 放在PHP里,必须用一个循环才能取到这3条记录,如下所示:   PHP代码 代码如下:foreach ($pdo->query("SELECT student_id, courses_id FROM student_courses WHERE student_id=2") as $row) {          $result[] = $row['courses_id'];      }     而如果采用GROUP_CONCAT()函数和GROUP BY语句就显得非常简单了,如下所示:   SQL代码  代码如下:mysql> SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;      +------------+---------+      | student_id | courses |      +------------+---------+      |          2 | 3,4,5   |      +------------+---------+      1 row IN SET (0.00 sec)    这样php里处理就简单了:   PHP代码 代码如下:$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id");      $result = explode(',', $row['courses']);     分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:   SQL代码 代码如下:SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;     除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排: SQL代码 代码如下:SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

小编还为您整理了以下内容,可能对您也有帮助:

Mysql如何实现合并多行字符串?

mysql如何实现多行查询结果合并成一行,mysql如何实现多行查询结果合并成一行网站简介信息x0dx0ax0dx0a利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行。 x0dx0ax0dx0a其完整语法: x0dx0ax0dx0aGROUP_CONCAT(expr) x0dx0ax0dx0a该函数返回带有来自一个组的连接的非NULL值的字符串结果。其完整的语法如下所示: x0dx0ax0dx0aGROUP_CONCAT([DISTINCT] expr [,expr ...] x0dx0ax0dx0a[ORDER BY {unsigned_integer | col_name | expr} x0dx0ax0dx0a[ASC | DESC] [,col_name ...]] x0dx0ax0dx0a[SEPARATOR str_val]) x0dx0ax0dx0amysql> SELECT student_name, x0dx0ax0dx0a GROUP_CONCAT(test_score) x0dx0ax0dx0a FROM student x0dx0ax0dx0a GROUP BY student_name; x0dx0ax0dx0aOr: x0dx0ax0dx0amysql> SELECT student_name, x0dx0ax0dx0a GROUP_CONCAT(DISTINCT test_score x0dx0ax0dx0a ORDER BY test_score DESC SEPARATOR ') x0dx0ax0dx0a FROM student x0dx0ax0dx0a GROUP BY student_name; x0dx0ax0dx0a在MySQL中,你可以获取表达式组合的连接值。你可以使用DISTINCT删去重复值。假若你希望多结果值进行排序,则应该使用 ORDER BY子句。若要按相反顺序排列,将 DESC (递减) 关键词添加到你要用ORDER BY 子句进行排序的列名称中。默认顺序为升序;可使用ASC将其明确指定。 SEPARATOR 后面跟随应该被插入结果的值中间的字符串值。默认为逗号 (‘,')。通过指定SEPARATOR ',你可以删除所有分隔符。 x0dx0ax0dx0a使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数: x0dx0ax0dx0aSET [SESSION | GLOBAL] group_concat_max_len = val;

mysql查询数据怎么合并为一条

MySQL InnoDB 表数据页或者二级索引页(简称数据页或者索引页)的合并与*对 InnoDB 表整体性能影响很大;数据页的这类操作越多,对 InnoDB 表数据写入的影响越大。
MySQL 提供了一个数据页合并临界值(MERGE_THRESHOLD),在某些场景下,可以人为介入,减少数据页的合并与*。
在 InnoDB 表里,每个数据页默认16K 大小,默认 MERGE_THRESHOLD 值为 50,取值范围从 1 到 50,默认值即是最大值。也就是当页面记录数占比小于 50% 时,MySQL 会把这页和相邻的页面进行合并,保证数据页的紧凑,避免太多浪费。

mysql查询数据怎么合并为一条

MySQL InnoDB 表数据页或者二级索引页(简称数据页或者索引页)的合并与*对 InnoDB 表整体性能影响很大;数据页的这类操作越多,对 InnoDB 表数据写入的影响越大。
MySQL 提供了一个数据页合并临界值(MERGE_THRESHOLD),在某些场景下,可以人为介入,减少数据页的合并与*。
在 InnoDB 表里,每个数据页默认16K 大小,默认 MERGE_THRESHOLD 值为 50,取值范围从 1 到 50,默认值即是最大值。也就是当页面记录数占比小于 50% 时,MySQL 会把这页和相邻的页面进行合并,保证数据页的紧凑,避免太多浪费。

怎么在mysql里做字符串连接

在mysql里做字符串连接主要用到“CONCAT”函数,主要使用方法如下:

这样查询出来的结果,就把原来ts_test里面的save_path和save_name组装到thumb字段里面!

mysql字符串拼接

说明 : string1,string2代表字符串,concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

结果:

说明:将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)

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

说明:

DISTINCT:去除重复值

expr [,expr ...]:一个或多个字段(或表达式)

ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]:根据字段或表达式进行排序,可多个

SEPARATOR str_val:分隔符(默认为英文逗号)

group_concat()函数在处理大数据的时候,会发现内容被截取了

其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改配置文件

莱芜美食还为您提供以下相关内容希望对您有帮助:

Mysql如何实现合并多行字符串?

mysql如何实现多行查询结果合并成一行,mysql如何实现多行查询结果合并成一行网站简介信息\x0d\x0a\x0d\x0a利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行。 \x0d\x0a\x0d...

MySQL 的 GROUP_CONCAT 函数详解

【2】可以使用 DISTINCT 过滤重复的值,也可以加入 ORDER BY 对值进行排序,还可以使用 SEPARATOR 指定分隔符:这里的返回值以过滤了重复值,并且倒序排序,还使用了空格作为分隔符。GROUP_CONCAT() 是有最大长度限制的,默...

mysql查询数据怎么合并为一条

MySQL 提供了一个数据页合并临界值(MERGE_THRESHOLD),在某些场景下,可以人为介入,减少数据页的合并与分裂。在 InnoDB 表里,每个数据页默认16K 大小,默认 MERGE_THRESHOLD 值为 50,取值范围从 1 到 50,默认值即是最...

怎么在mysql里做字符串连接

在mysql里做字符串连接主要用到“CONCAT”函数,主要使用方法如下:这样查询出来的结果,就把原来ts_test里面的save_path和save_name组装到thumb字段里面!

MySql 中如何连接一列字符串

GROUP_CONCAT(expr)完整句法如下: GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]][SEPARATOR str_val])这个函数在 MySQL 4.1 中被...

Oracle中的listagg函数和Mysql中group_concat的用法

使用 listagg() WITHIN GROUP () 将多行合并成一行(比较常用)···SELECT T .DEPTNO,listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names FROM SCOTT.EMP T WHERE T .DEPTNO = '20'GROUP BY...

mysql中的多行查询结果能不能合并成一个

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])基本查询 mysql> select * from aa;+---+---+ | id| name | +---+---+ |1 | 10| |1 | 20| |1 | 20|...

mysql字符串拼接

可多个 SEPARATOR str_val:分隔符(默认为英文逗号)group_concat()函数在处理大数据的时候,会发现内容被截取了 其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改配置文件 ...

mysql如何将多行数据合并成一行

select id,group_concat(re_id order by re_id separator ",") as re_id from tablename group by id 方法2:select group_concat(list_name) from aa_list 如果还有问题,可以继续追问,感谢。

sybase取出一列,并拼接成一个字符串,如何写

在mysql中有group_concat()函数可以做到:select age,group_concat(userName)from table group by age;执行的结果些微差别:1 name1,name2,name3 2 name4,name5 就是有逗号分割,如果非要去掉逗号,可以使用replace(...

Top