postgresql如何实现group_concat功能
2015-10-10 16:20
531 查看
MySQL有个聚集函数group_concat, 它可以按group的id,将字段串联起来,如表:
PostgreSQL没有现成的group_concat聚集函数,但可以自定义聚集函数,所以可以容易的实现这功能。
参数anyelement匹配任何类型,聚集后返回数组类型anyarray,该函数的功能是将每行的记录附加到数组里。
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 函数
<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,2,3,4,5} |
array_append(anyarray,anyelement) | anyarray | 向一个数组末尾附加一个元素 | array_append(ARRAY[1,2], 3) | {1,2,3} |
array_prepend(anyelement,anyarray) | anyarray | 向一个数组开头附加一个元素 | array_prepend(1, ARRAY[2,3]) | {1,2,3} |
array_dims (anyarray) | text | 返回一个数组维数的文本表现 | array_dims(ARRAY[[1,2,3], [4,5,6]]) | [1:2][1:3] |
array_lower (anyarray,int) | int | 返回指定的数组维数的下界 | array_lower(array_prepend(0, ARRAY[1,2,3]), 1) | 0 |
array_upper (anyarray,int) | int | 返回指定数组维数的上界 | array_upper(ARRAY[1,2,3,4], 1) | 4 |
array_to_string (anyarray,text) | text | 使用提供的分隔符连接数组元素 | array_to_string(ARRAY[1, 2, 3], '~^~') | 1~^~2~^~3 |
string_to_array (text,text) | text[] | 使用指定的分隔符把字串分裂成数组元素 | string_to_array('xx~^~yy~^~zz', '~^~') | {xx,yy,zz} |
相关文章推荐
- mariadb配置安装
- mysql 知识点总结
- mysql5.5 max_connections参数设置失效
- Mysql命令行添加用户
- poco框架库:数据库的基本用法 推荐
- mysql limit分页查询效率
- mysql遇到的报错
- Oracle-分页与集合查询
- mysql show processlist 命令详解
- linux mongodb配置
- mysql kill操作
- SQL Server编程必知必会 -- (1-20点总结)
- 最后那3分——ER模型到关系模型的转换
- MongoDB 3.0.6的主,从,仲裁节点搭建
- MySQL 主从复制
- mysql反引号的使用
- mysql设置root密码
- 关于数据库查询一个表中的数据插入到另一个表中
- 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
- mysql对查询的结果集排序