网站制作学习网→http://www.forasp.cn/→正文:mysql GROUP_CONCAT
字体:

mysql GROUP_CONCAT

http://www.forasp.cn/ 2023/3/28 14:04:42  点击:不统计


在mysql 查询中经常用到group by分组,当数据分组后,没有分组的数据想全部获取并输出,那就用到了GROUP_CONCAT
 
在mysql中 GROUP_CONCAT ,是指 将没有分组的字段,进行连接作为一个新的字段来使用
比如 有表:student_score 如下:
+------+--------+------------+-------+
| id   | name   | class_name | score |
+------+--------+------------+-------+
|    1 | 张三   | 数学       |    70 |
|    2 | 李四   | 语文       |    81 |
|    3 | 王武   | 数学       |    98 |
|    4 | 张三   | 语文       |    56 |
+------+--------+------------+-------+
 
比如 查询每个人都参与了什么考试,那sql语句如下
mysql >. select name,GROUP_CONCAT(class_name  SEPARATOR "-")  as ’考试名称‘ from student_score group by name;
GROUP_CONCAT结果为:
+--------+---------------+
| name   | 考试名称      |
+--------+---------------+
| 张三   | 数学-语文     |
| 李四   | 语文          |
| 王武   | 数学          |
+--------+---------------+
上面就是按照 名称分组,将考试的class_name 进行数据连接,作为新字段“考试名称”输出。
 
 
如果按照考试名称排序,那么GROUP_CONCAT 可以增加排序条件
mysql >. select name,GROUP_CONCAT(class_name order by class_name desc  SEPARATOR "-")  as ’考试名称‘ from student_score group by name;
GROUP_CONCAT结果为:
+--------+---------------+
| name   | 考试名称      |
+--------+---------------+
| 张三   | 语文-数学     |
| 李四   | 语文          |
| 王武   | 数学          |
+--------+---------------+
 
中间的分隔符 “-”  可以根据SEPARATOR 后面进行自定义。
 
 
如果即向看到考试科目,又要有考试分数,GROUP_CONCAT 增加多字段,如下
mysql >select name,GROUP_CONCAT(class_name,score order by class_name desc  SEPARATOR "-") as "考试名称" from student_score group by name;
 
+--------+-------------------+
| name   | 考试名称          |
+--------+-------------------+
| 张三   | 语文56-数学70     |
| 李四   | 语文81            |
| 王武   | 数学98            |
+--------+-------------------+

如果即向看到考试科目,又要有考试分数,又要有分隔符,GROUP_CONCAT 增加多字段,如下
select name,GROUP_CONCAT(class_name,":",score order by class_name desc  SEPARATOR "-") as "考试名称" from stuedent_score group by name;
输出结果:
+--------+---------------------+
| name   | 考试名称            |
+--------+---------------------+
| 张三   | 语文:56-数学:70     |
| 李四   | 语文:81             |
| 王武   | 数学:98             |
+--------+---------------------+ 


在 GROUP_CONCAT 查询中如果遇到了空内容,需要给出默认值,则 
GROUP_CONCAT(class_name,score order by class_name desc  SEPARATOR "-", COALESCE(字段名,默认值))
 
以上就是 GROUP_CONCAT的使用


如果 出现 Row x was cut by GROUP_CONCAT 表示配置限制了连接长度,
修改 参考https://www.forasp.cn/html/2945.html

·上一篇:mysql distinct group by 区别 >>    ·下一篇:mysql 优化 >>
推荐文章
最新文章