0


MySQL函数:列转行CONCAT、CONCAT_WS、GROUP_CONCAT的使用(精要)

前言

很久没有接触Mysql了。

今天心血来潮,突然想了解一下Mysql列转行,看了一些文章,重点不清晰,遂有下文!

Mysql官网、 社区版下载( Windows版_mysql.8.0.31下载 )

概述

Mysql内部提供了列转行的三个函数,分别是:

CONCAT(str1,str2,...)

CONCAT_WS(separator,str1,str2,...)

GROUP_CONCAT(expr)

数据准备

数据如下,简单明了。

#1、查看原始数据
select * from student;  

如上图所示,3条数据,足以说明问题。

案例解析

一、CONCAT(str1,str2,...)函数解析

首先,看到该函数的参数,str1和str2,立刻有种冲动,这两个参数应该看是任意字符串。

1、用concat函数,拼接任意字符串

select CONCAT('aaa',',','bbb') as info from dual;

效果如图所示:concat可以用来拼接任意字符串,并自定义分隔符!

2、用concat函数,把每行数据多列-->一行

select CONCAT(s.id,',',s.name,',',s.age) as infos from student s;

3、 注意事项

如果,仅仅是想把表中单列数据,转换为一行,concat函数,就显得有些力不从心了,需要用到group_concat函数,下面第三小节,会有介绍!

二、CONCAT_WS(separator,str1,str2,...)函数解析

从语法得知,separator是分隔符,后面str1和str2等等,是拼接字段。

不难理解,该函数只需指定一次分隔符即可。

select CONCAT_WS('#',id,name,age )  as infos from student  ;

注意:比较遗憾的是,该CONCAT_WS函数依然不能让单列,转行!

术业有专攻,单例转行需下面的GROUP_CONCAT函数!

三、GROUP_CONCAT(expr)函数解析(重点)

1、单例转行

select GROUP_CONCAT(name) as names from student ;

说明:本案例是对该函数简单的演示,sql后面依然可以带where group by等条件语句。

2、拓展

select GROUP_CONCAT('111',name) as names from student ;
select GROUP_CONCAT(name,'222') as names from student ;
select GROUP_CONCAT('111',name,'222') as names from student ;

运行结果:

111succ,111chouniu,111succ
succ222,chouniu222,succ222
111succ222,111chouniu222,111succ222

四、拓展

Oracle常用的列转行

select * from emp;
--方法一:使用concat函数,该函数只能有两个参数(不可以自定义分隔符),但是它允许套用
select concat(empno,ename) from emp; 
SELECT CONCAT(CONCAT('A', 'B'),'C')FROM dual;

--可以合并任意多个列为一行
select empno || ',' ||ename from emp;

--单列合并为一行,默认分隔符为逗号,如果想制定分隔符,则需要用replace函数协助
select wm_concat(ename) from emp;    
select replace(wm_concat(ename),',','|') from emp;

总结

至此,CONCATCONCAT_WSGROUP_CONCAT三个函数的使用,基本介绍清楚,当然在实际开发中,场景会复杂很多。

欣慰的是,有了这三个函数的辅助,后期实现更为复杂的行转列,也将是如虎添翼!

尾言

MySql知识点太多,后期将会推出更多精要的mysql知识点,不出则已,出必为精品,不废话!

如果觉得有用,欢迎留言、点赞、收藏!

标签: mysql CONCAT CONCAT_WS

本文转载自: https://blog.csdn.net/xp871038951/article/details/128266346
版权归原作者 血煞长虹 所有, 如有侵权,请联系我们删除。

“MySQL函数:列转行CONCAT、CONCAT_WS、GROUP_CONCAT的使用(精要)”的评论:

还没有评论