第一,不分组连接:listagg、concat
Listagg:——对一个字段
- oracle/db2
- 用来连接一个字段的所有值,所以为了不重复常会加distinct
Concat——对几个字段
- mysql/db2
例子:SELECT CONCAT('a','b') --ab
注:
- 在MySQL中,concat可以连接多个字段,但是在DB2中concat只支持两个字段相连接,Oracle中好像也只支持两个字段相连接
- group_concat 看这个 [Mysql] GROUP_CONCAT函数_山茶花开时。的博客-CSDN博客
若要在DB2中实现两个以上字段相连接,有两种方法
- 用||
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