sql concat函数_学习篇 | 对比Excel,学习SQL——分组合并字符串

d494c674d4fb7a0d872b0ed965b14f45.png

近期,给自己制订了一项学习计划。学习SQL,其实接触SQL那也是大学时期的事情,当时学习的是Access数据库,语句基本的也都没有忘,所以对于基本的SQL入门来说,可能也相对快一些。

另外,上个月的时候,得俊红老师的小蓝书《对比Excel,学习SQL数据分析》一书。作为入门教程感觉极佳,便萌生了再次学习SQL的念头。同时,自己也觉得是时候将以前自己的知识进行强化了,也作为一种兴趣爱好而已。

虽然作为一名人力资源从业者,况且还是个文科生,但是对于Excel以及计算机的兴趣丝毫没有减弱,这并不影响我学习代码。

此外本人的新书《Excel人力资源管理实战宝典》也即将快要和广大的读者见面了,预计8月底吧。

所以,边学习SQL边更新公众号,后面将会对比Power Query,Power pivot学习。也希望广大的读者们指正批评。如有不当的地方,请予以指明。

本期Excel函数:Textjoin

本期SQL函数:group_concat

源数据如下:

a6b285b95e3ec53fd15427302b4bcdd8.png

结果如下:

e12eb5382c8709104d1db79307bf2dde.png

在Excel中这个问题要使用到数组公式,即:

在H5单元格中输入以下公式,按键完成。

{=TEXTJOIN(",",1,IF(G5=Sheet1!$B$2:$B$15,Sheet1!$D$2:$D$15,""))}

在I5单元格中输入以下公式,按Enter键完成。

=ROUND(AVERAGEIF($B$2:$B$15,G5,$D$2:$D$15),2)

在SQL中这个问题解决也是相对比较容易的,分组合并即可。代码如下:

select  class,  group_concat(score) as score_concat,  round(avg(score), 2)as avg_scorefrom  mydata.mytable_classgroup by  class

结果如下:

1a0bc27217004c4317daf7a2f4dcc984.png

在上述有代码里面,使用到了最重要的一个SQL函数是group_concat函数。

这里省略了分隔符,默认为逗号,也可以指定分隔符。如下代码所示:

select  class,  group_concat(score separator ";") as score_concat,  round(avg(score), 2)as avg_scorefrom  mydata.mytable_classgroup by  class

结果如下:

86a0c99edf36e9cbbacbefcd2cacd38c.png

除了指定分隔符外,还可以对合并的数字进行排序。如下代码所示:

select  class,  group_concat(scoreorder by  score separator ";") as score_concat,  round(avg(score), 2)as avg_scorefrom  mydata.mytable_classgroup by  class

结果如下:

7f0b064db40c3a3acaa8348cc1fd2646.png

当然还可以给结果加上序号,如下所示:

select  (@i := @i + 1) as id,  class,  group_concat( scoreorder by  score separator ";") as score_concat,  round(avg(score), 2)as avg_scorefrom  mydata.mytable_class,  (  select    @i := 0) as itgroup by  class

结果如下:

ba9fcf0250ece5ded5ac4c206b785fa2.png

关于后面的在SQL中使用变量的方法在以后的帖子中会有相关的案例与说明。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值