`
marb
  • 浏览: 422611 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PostgreSQL中的group_concat使用

 
阅读更多

group_concat是mysql中的一个聚集函数,挺好用的,mysql的group_concat使用可参考:http://my.oschina.net/Kenyon/blog/70480。在postgresql中实现这个功能倒也容易,可以用array的转换或者函数string_agg()来做。 

DB环境:postgresql 9.1.2 

一.测试数据准备

postgres=# create table t_kenyon(id int,name text);
CREATE TABLE
postgres=# insert into t_kenyon values(1,'kenyon'),(1,'chinese'),(1,'china'),('2','american'),('3','japan'),('3','russian');
INSERT 0 6
postgres=# select * from t_kenyon order by 1;
 id |   name   
----+----------
  1 | kenyon
  1 | chinese
  1 | china
  2 | american
  3 | japan
  3 | russian
(6 rows)

二.实现过程 

1.以逗号为分隔符聚集

postgres=# select array_to_string(ARRAY(SELECT unnest(array_agg(name))),',') from t_kenyon ;
               array_to_string               
---------------------------------------------
 kenyon,chinese,china,american,japan,russian
(1 row)


 2.结合order by排序

postgres=# select array_to_string(ARRAY(SELECT unnest(array_agg(name)) order by 1),',') from t_kenyon;
               array_to_string               
---------------------------------------------
 american,china,chinese,japan,kenyon,russian
(1 row)


 3.结合group聚集

postgres=# SELECT id, array_to_string(ARRAY(SELECT unnest(array_agg(name)) 
             ),',') FROM t_kenyon GROUP BY id;
 id |   array_to_string    
----+----------------------
  1 | china,chinese,kenyon
  2 | american
  3 | japan,russian
(3 rows)

4.以其他分隔符聚集,如*_*

postgres=# SELECT id, array_to_string(ARRAY(SELECT unnest(array_agg(name)) 
             order by 1),'*_*') FROM t_kenyon GROUP BY id ORDER BY id;
 id |     array_to_string      
----+--------------------------
  1 | china*_*chinese*_*kenyon
  2 | american
  3 | japan*_*russian
(3 rows)


还有一个函数更简:string_agg

postgres=# create table t_test(id int,vv varchar(100)); 
CREATE TABLE 
postgres=# insert into t_test values(1,'kk'),(2,'ddd'),(1,'yy'),(3,'ty'); 
INSERT 0 4  

postgres=# select * from t_test;  
id | vv   
----+-----   
1 | kk   
2 | ddd   
1 | yy   
3 | ty 
(4 rows)  

postgres=# select id,string_agg(vv,'*^*') from t_test group by id;  
id | string_agg  
----+------------   
1 | kk*^*yy   
2 | ddd   
3 | ty 
(3 rows) 



三.总结

postgresql也可以很简单的实现mysql中的group_concat功能,而且更加丰富,可以基于此写一个同名的函数。

分享到:
评论

相关推荐

    greenplum常用函数-基础

    在数据仓库的使用过程中,掌握一些常用函数对于提升工作效率和维护数据准确性至关重要。根据给定的文件内容,我们将详细介绍Greenplum中常用的基础函数。 首先,创建表是数据库管理中的基础操作。在Greenplum中,...

    DB2到GreenPlum/PostgreSQL的转换指南

    在FROM子句中使用子查询来定义临时表也是一种常见的做法。DB2与GreenPlum/PostgreSQL在这方面的实现相似,但在某些细节上可能存在差异。 ##### 2.4.3 在查询的SELECT部分中完全选择 在SELECT子句中嵌入子查询来生成...

    将MySQL数据库移植为PostgreSQL

    例如,MySQL的`GROUP_CONCAT()`在PostgreSQL中可以使用`STRING_AGG()`替代。 5. **性能优化** PostgreSQL提供了丰富的索引类型和优化手段,如GiST、SP-GiST、GIN等,根据业务需求,可能需要重新设计和创建索引来...

    存储过程拼接字符串

    `CONCAT_WS()`(CONCAT With Separator)函数在MySQL中提供了一个分隔符,允许你指定一个分隔符来连接字符串。 ```sql SELECT CONCAT_WS(', ', 'Hello', 'World'); ``` 三、Oracle中的字符串拼接 1. 使用`||`...

    数据库基本语法对比及用法.rar

    在内置函数上,四者都有自己的特色,如Oracle的DBMS_OUTPUT用于调试,MySQL的GROUP_CONCAT用于聚合,SQL Server的COALESCE处理NULL,PostgreSQL的JSON操作函数等。 在游标和存储过程中,Oracle和SQL Server提供了更...

    sql 数据转化为XML 格式的数据

    在MySQL中,可以使用`CONCAT`和`GROUP_CONCAT`函数结合字符串操作来构建XML。在Oracle中,可以利用`XMLTYPE`和`XMLElement`函数进行转换。 如果SQL Server的数据量非常大,可能需要分批导出,这时可以使用游标配合...

    超有用sql笔记总结

    在MySQL中,可以使用`GROUP_CONCAT()`函数来达到类似效果。 5. **触发器**: - `CREATE TRIGGER` 语句用于创建触发器,示例中创建了两个触发器,一个处理`UPDATE`事件,另一个处理`DELETE`事件。触发器会在表`t1`...

    常用SQL_sql_

    6. **分页查询**:`LIMIT`和`OFFSET`在MySQL或PostgreSQL中用于获取结果集的一部分,比如`SELECT * FROM Employees LIMIT 5 OFFSET 10;`会返回第11至第15条记录。 7. **连接查询**:`JOIN`语句用于合并两个或更多表...

    sql.pdf

    - **字符串链接函数**:`concat()`、`concat_ws()`和`group_concat()`用于拼接字符串。 - **系统函数**:`version()`、`user()`、`database()`等获取系统信息。 - **逻辑运算**:构造布尔盲注、时间盲注、报错...

    列换行

    列转行通常可以通过SQL的聚合函数和子查询来实现,比如在MySQL中可以使用`GROUP_CONCAT`,在SQL Server中可以使用`STRING_AGG`,在PostgreSQL中可以使用`STRING_AGG`或`ARRAY_AGG`等。此外,Pandas库在Python中是一...

    SQL高级实例-模糊查询-分组随机查询-转换

    对于XML和JSON,MySQL提供`XML_CONCAT`和`JSON_MERGE_PATCH`等函数,而PostgreSQL有`xmlparse`和`jsonb`类型来处理这类数据。 通过深入理解和实践这些高级SQL概念,你将能够更有效地处理复杂的数据查询和分析任务,...

    sql 多行合并某一列字符串拼接的示例

    例如,在SQL Server中,可以使用`+`操作符或`CONCAT()`函数;在MySQL中,主要使用`CONCAT()`函数;而在PostgreSQL中,则有`||`操作符。然而,当涉及到多行数据时,简单的拼接操作可能不足以满足需求,因为我们需要将...

    从Excel中读取数据导入到数据库中

    2. **拆分数据**:在编程环境中,可以将超长文本拆分为多个字段,或者在数据库中使用适合存储长文本的字段类型,如`TEXT`或`LONGTEXT`。 3. **使用其他格式**:如果可能,可以考虑将超长文本存储在单独的表格或文件...

    sql入门教程

    SQL(Structured Query Language)是用于存储、检索和操作关系型数据库的标准...在实际应用中,根据数据库的具体类型(如MySQL、PostgreSQL、SQL Server等),具体的SQL语法可能会略有差异,但基础概念和结构是通用的。

    sql代码_sql_

    在学习SQL时,还需了解如何使用WHERE子句过滤数据,GROUP BY子句进行数据分组,HAVING子句过滤分组后的结果,以及ORDER BY子句进行排序。JOIN操作用于将多个表的数据关联在一起,有INNER JOIN(内连接),LEFT JOIN...

    SQL 必知必会.pdf

    * 可移植性:SQL 语言可以在多种不同的数据库管理系统中使用。 2. SQL 数据类型 SQL 语言支持多种数据类型,包括: * 数字类型:int、smallint、tinyint、float、double 等。 * 字符串类型:varchar、char、text ...

    sql21自学通

    - 子查询可以在SELECT、FROM或WHERE子句中使用。 - 示例:`SELECT * FROM employees WHERE id IN (SELECT manager_id FROM employees);` - **在子查询中使用汇总函数:** - 示例:`SELECT department_id FROM ...

    学习sql资料

    学习SQL资料的目的是为了让读者掌握基本的SQL语句及其用法,并了解在使用过程中需要注意的一些特点,同时通过实例加深理解数据库的基础概念。 首先,SQL语句的基本组成部分包括数据操纵语言(DML)、数据定义语言...

    sql语句查询使用

    - **在SELECT语句中使用子查询**:可以将子查询结果作为列或表的一部分,增强查询能力。 以上内容涵盖了SQL语句查询使用的多个方面,从基础概念到高级功能,旨在帮助读者全面掌握SQL语言,无论是初学者还是有经验的...

    sql21自学通.pdf

    - 子查询可以在SELECT、FROM、WHERE等子句中使用。 - 示例: ```sql SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700); ``` - **在子查询...

Global site tag (gtag.js) - Google Analytics