加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql如何实现group_concat功能

发布时间:2020-12-13 17:14:10 所属栏目:百科 来源:网络整理
导读:MySQL有个聚集函数group_concat, 它可以按group的id,将字段串联起来,如 表: span style="font-size:14px;"span style="font-size:14px;"id name---------------1 A2 B1 BSELECT id,group_concat(name) from xxx group by id得出的结果为id group_concat(

MySQL有个聚集函数group_concat, 它可以按group的id,将字段串联起来,如表:

<span style="font-size:14px;"><span style="font-size:14px;">id name
---------------
1 A
2 B
1 B
SELECT id,group_concat(name) from xxx group by id
得出的结果为
id group_concat(name)
---------------------------
1 A,B
2 B</span></span>

PostgreSQL没有现成的group_concat聚集函数,但可以自定义聚集函数,所以可以容易的实现这功能。
自定义聚集函数 group_concat
CREATE AGGREGATE group_concat(anyelement)
(
sfunc = array_append,-- 每行的操作函数,将本行append到数组里
stype = anyarray,-- 聚集后返回数组类型
initcond = '{}' -- 初始化空数组
);

参数anyelement匹配任何类型,聚集后返回数组类型anyarray,该函数的功能是将每行的记录附加到数组里。
<span style="font-size:14px;">SELECT id,group_concat(name) from xxx group by id
得出的结果为
id array_accum(name)
---------------------------
1 {'A','B'}
2 {'B'}</span>
array_accum(name)为数组类型,再用array_to_string函数将数组转换为字符串

SELECT id,array_to_string(group_concat(name),',') from xxx group by id
就可以得到group_concat相同的结果了。

但MySQL的group_concat的功能很强,比如可以排序等,postgresql若要模拟它,只能自己定义一个增强型的函数比如array_to_string_plus,可以对数组进行排序后再concat,这里就不用多述,留给各位动脑筋吧。




附表:Table 9-36.array函数

函数 返回类型 描述 例子 结果
array_cat(anyarray,anyarray) anyarray 连接两个数组 array_cat(ARRAY[1,2,3],ARRAY[4,5]) {1,3,4,5}
array_append(anyarray,anyelement) anyarray 向一个数组末尾附加一个元素 array_append(ARRAY[1,2],3) {1,3}
array_prepend(anyelement,anyarray) anyarray 向一个数组开头附加一个元素 array_prepend(1,ARRAY[2,3]) {1,3}
array_dims(anyarray) text 返回一个数组维数的文本表现 array_dims(ARRAY[[1,[4,5,6]]) [1:2][1:3]
array_lower(anyarray,int) int 返回指定的数组维数的下界 array_lower(array_prepend(0,ARRAY[1,3]),1) 0
array_upper(anyarray,int) int 返回指定数组维数的上界 array_upper(ARRAY[1,4],1) 4
array_to_string(anyarray,text) text 使用提供的分隔符连接数组元素 array_to_string(ARRAY[1,'~^~') 1~^~2~^~3
string_to_array(text,text) text[] 使用指定的分隔符把字串分裂成数组元素 string_to_array('xx~^~yy~^~zz','~^~') {xx,yy,zz}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读