<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函数
@H_301_68@