当前位置:   article > 正文

SQL之concat()、collect_set()、collect_list()和concat_ws()用法_sql collect

sql collect

1、concat_ws()函数和concat()函数的拼接使用极其区别

1.1区别

concat():函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

  1. 执行代码:
  2. select concat('a','b',null);
  3. 执行结果:
  4. NULL

concat_ws():函数在连接字符串的时候,只要有一个字符串不是NULL,就不会返回NULL。concat_ws():函数需要指定分隔符

  1. 执行代码1
  2. hive>
  3. select concat_ws('-','a','b');
  4. 执行结果:
  5. a-b
  6. 执行代码2
  7. hive>
  8. select concat_ws('-','a','b',null);
  9. 执行结果:
  10. a-b
  11. 执行代码3
  12. hive>
  13. select concat_ws('','a','b',null);
  14. 执行结果:
  15. ab

2、collect_set()无序和collect_list()的区别

参考链接:SQL小知识点系列-3-collect_list/collect_set(列转行) - 知乎

2.1区别:

他们都是将分组中的某列转为一个数组返回,

不同的是collect_list不去重而collect_set去重

2.2 collect_list()函数有序不去重

2.3 collect_set()无序去重

根据某个字段分组后,利用collect_list()函数把分在一组的数据合并在一起,默认分隔符’,’ 如

abc
11“1”,“2”
12“1”,"2”
12“1”,“2”,“2”

2.4实例

原始temp数据

idclass
loongshaw1
loongshaw2
loongshaw3
loongshaw4

期望值

idclass
loongshaw1,2,3,4

输入代码:

  1. select
  2. t.id,
  3. concat_ws(',', collect_set(t.class))
  4. from
  5. temp t
  6. group by
  7. t.id

实际结果,class合并后并不是有序

idclass
loongshaw1,3,2,4

解决方式:
将collect_set无序集合,改成collect_list或sort_array进行排序。

concat_ws(',', sort_array(collect_set(t.class), false))

sort_array(e: column, asc: boolean)将array中元素排序(自然排序),默认asc。

或者:

concat_ws(',',collect_list(t.class))

结果,class合并后有序

idclass
loongshaw1,2,3,4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/553885
推荐阅读
相关标签
  

闽ICP备14008679号