Mysql高阶函数(一)

183 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

今天我们说说mysql的高阶函数部分,跳出传统的crud,因为某些时候高阶函数会对我们的开发和排查起到很方便的作用;

首先我们建两张表

concat()函数

这个函数的功能是将多个我们需要的字符串进行拼接,这个字符串可能是我们的关键字,也可能是我们的分隔符,我们直接看用例;

select concat('分隔符---',',','关键字',u.name,',','对应的中文名是:',n.chName) as newTitle from user u inner join nameside n
on u.NAME = n.name

这样出来的结果我们摘一个出来就是分隔符---,关键字aaa,对应的中文名是:a中文名;是的,这个的语法就是concat(str,str2,str3...);从我的用例应该可以看到,如果我拼接过多,那每个都要加分割符会很麻烦的,这个时候我们可以使用另一个方法CONCAT_WS,设置一个默认的就好了,看用例是以&符号进行分割的;

select CONCAT_WS('&','分隔符---','关键字',u.name,'对应的中文名是:',n.chName) as newTitle from user u inner join nameside n
on u.NAME = n.name

显示的是分隔符---&关键字&aaa&对应的中文名是:&a中文名,该语法是CONCAT_WS(separator,str1,str2,...),说到这了还有一个冷门的方法**group_concat()**函数,它表示同一个分组中的值连接起来,返回一个字符串结果,我新增了eee,fff两个数据,我们大概看下用例,返回的是bbb,eee,fff

select GROUP_CONCAT(name) from user GROUP BY account

那我们把他们连起来看看,大概意思是根据account分组,然后对name和age进行拼接,根据拼接的进行去重,最后根据age排序;

select GROUP_CONCAT(DISTINCT CONCAT_WS('&',name,age) ORDER BY age) from user GROUP BY account

对于本地窗口函数我本地演示不了,有兴趣自行了解;还有对于MaxCompute存在COLLECT_SET函数,它是将指定的列值聚合为一个无重复元素的数组,我们可以根据一个具体的column对其group by,由于我本地不支持MaxCompute,所以简单描述下,我们可以用CONCAT_WS指定分割符,即CONCAT_WS(',COLLECT_SET(t1.column))mn,这样就可以得到该分组下的数据拼接',COLLECT\_SET(t1.column)) mn,这样就可以得到该分组下的数据拼接t1.colt1.colt1.colt1.col...;这里的t1.col是一个无重复值的数组呦🥗🥗🥗;

结束结束,那就🛴🛴🛴

如果对你有所帮助

点个赞呗