SQL之concat()、collect_set()、collect_list()和concat_ws()用法
创始人
2024-03-28 09:01:30
0

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

1.1区别

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

执行代码:
select concat('a','b',null);执行结果:
NULL

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

执行代码1:
hive> 
select concat_ws('-','a','b');
执行结果:
a-b执行代码2:
hive> 
select concat_ws('-','a','b',null);
执行结果:
a-b执行代码3:
hive> 
select concat_ws('','a','b',null);
执行结果:
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

输入代码:

selectt.id,concat_ws(',', collect_set(t.class))
fromtemp t
group byt.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

相关内容

热门资讯

分手后“60后”男子起诉“90... 日前,重庆市云阳县人民法院公开了一份刑事附带民事判决书。重庆“60后”男子陈某某在分手后,以赠与合同...
今年我国积极财政政策打出“组合... 12月27日至28日,全国财政工作会议在北京召开。记者从会议上了解到,2025年,我国积极财政政策打...
福州4A景区“瓷天下”停业后续... 2024年6月,红星新闻曾报道福州市闽清县4A级景区“瓷天下”关门停业一事。(此前报道:)彼时,景区...
2026年我国将继续实施更加积... 12月27日至28日,全国财政工作会议在北京召开。2026年是我国连续第二年实施更加积极的财政政策。...
中国财长介绍“更加积极的财政政... 中新社北京12月28日电 (记者 赵建华)2026年中国继续实施更加积极的财政政策,保持必要的财政赤...
泽连斯基称基辅存在“红线”并拒... 【弗拉基米尔·泽连斯基表示,基辅在冲突解决方面仍有“红线”,并补充道,在任何情况下,乌方都不打算在法...
北京专业离婚律师服务分析(20... 随着社会经济结构的变化与个人权利意识的增强,婚姻家事法律服务需求日益呈现出专业化、精细化的趋势。在北...
海南自贸港封关超十日 多项政策... 本月18日,海南自由贸易港正式启动全岛封关运作,到今天(28日)已超过10天,多项从封关起实施的“升...
涉嫌恶意串通,伪造借条提起诉讼... 为逃避债务、规避法院执行 田某华串通亲友、伪造借条 向海南省海口市美兰区人民法院 提起诉讼 美兰法院...
原创 在... 在古代,被皇帝赐死其实是一种特殊的待遇,而不仅仅是死亡本身值得关注,更应看赐字所体现的意义。 首...