字符串连接函数party:||、listagg、concat、group_concat、string_agg()、collect_list、collect_set

第一,不分组连接:listaggconcat

Listagg:——对一个字段

  • oracle/db2
  • 用来连接一个字段的所有值,所以为了不重复常会加distinct

Concat——对几个字段

  • mysql/db2

例子:SELECT CONCAT('a','b')  --ab

注:

  • MySQL中,concat可以连接多个字段,但是在DB2concat只支持两个字段相连接,Oracle中好像也只支持两个字段相连接
  • group_concat 看这个 [Mysql] GROUP_CONCAT函数_山茶花开时。的博客-CSDN博客

若要在DB2中实现两个以上字段相连接,有两种方法

  1. ||

 2、用两次concat

第二:分组连接:collect_list、collect_set、group_concat、listagg()within group(order by )

  1、collect_list、collect_set  ——hive

  • hive中的分组连接
  • 可以返回一个数组
  • 具体见hive页的记录

Hive笔记之collect_list/collect_set(列转行) - CC11001100 - 博客园 (cnblogs.com)

 2、listagg() within group(order by c)  ——oracle

2020-11-02 oracle sql listagg函数使用_爱学习的ljz的博客-CSDN博客

3、group_concat  ——mysql

mysql和oracle之间的改写

select

  dept,

group_concat ( id ORDER BY age separator ',' ) ids, 
 --按dept分组,按age的顺序,以','为分隔符连接各个部门的ID

group_concat ( name ORDER BY age separator ',' ) names,
--按dept分组,按age的顺序,以','为分隔符连接各个部门的name

from users  group by dept

相当于

select dept,

listagg(id,',') within group(order by age) ids ,

listagg(name,',') within group(order by age) names

from users group by dept