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中,...
在FROM子句中使用子查询来定义临时表也是一种常见的做法。DB2与GreenPlum/PostgreSQL在这方面的实现相似,但在某些细节上可能存在差异。 ##### 2.4.3 在查询的SELECT部分中完全选择 在SELECT子句中嵌入子查询来生成...
例如,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. 使用`||`...
在内置函数上,四者都有自己的特色,如Oracle的DBMS_OUTPUT用于调试,MySQL的GROUP_CONCAT用于聚合,SQL Server的COALESCE处理NULL,PostgreSQL的JSON操作函数等。 在游标和存储过程中,Oracle和SQL Server提供了更...
在MySQL中,可以使用`CONCAT`和`GROUP_CONCAT`函数结合字符串操作来构建XML。在Oracle中,可以利用`XMLTYPE`和`XMLElement`函数进行转换。 如果SQL Server的数据量非常大,可能需要分批导出,这时可以使用游标配合...
在MySQL中,可以使用`GROUP_CONCAT()`函数来达到类似效果。 5. **触发器**: - `CREATE TRIGGER` 语句用于创建触发器,示例中创建了两个触发器,一个处理`UPDATE`事件,另一个处理`DELETE`事件。触发器会在表`t1`...
6. **分页查询**:`LIMIT`和`OFFSET`在MySQL或PostgreSQL中用于获取结果集的一部分,比如`SELECT * FROM Employees LIMIT 5 OFFSET 10;`会返回第11至第15条记录。 7. **连接查询**:`JOIN`语句用于合并两个或更多表...
- **字符串链接函数**:`concat()`、`concat_ws()`和`group_concat()`用于拼接字符串。 - **系统函数**:`version()`、`user()`、`database()`等获取系统信息。 - **逻辑运算**:构造布尔盲注、时间盲注、报错...
列转行通常可以通过SQL的聚合函数和子查询来实现,比如在MySQL中可以使用`GROUP_CONCAT`,在SQL Server中可以使用`STRING_AGG`,在PostgreSQL中可以使用`STRING_AGG`或`ARRAY_AGG`等。此外,Pandas库在Python中是一...
对于XML和JSON,MySQL提供`XML_CONCAT`和`JSON_MERGE_PATCH`等函数,而PostgreSQL有`xmlparse`和`jsonb`类型来处理这类数据。 通过深入理解和实践这些高级SQL概念,你将能够更有效地处理复杂的数据查询和分析任务,...
例如,在SQL Server中,可以使用`+`操作符或`CONCAT()`函数;在MySQL中,主要使用`CONCAT()`函数;而在PostgreSQL中,则有`||`操作符。然而,当涉及到多行数据时,简单的拼接操作可能不足以满足需求,因为我们需要将...
2. **拆分数据**:在编程环境中,可以将超长文本拆分为多个字段,或者在数据库中使用适合存储长文本的字段类型,如`TEXT`或`LONGTEXT`。 3. **使用其他格式**:如果可能,可以考虑将超长文本存储在单独的表格或文件...
SQL(Structured Query Language)是用于存储、检索和操作关系型数据库的标准...在实际应用中,根据数据库的具体类型(如MySQL、PostgreSQL、SQL Server等),具体的SQL语法可能会略有差异,但基础概念和结构是通用的。
在学习SQL时,还需了解如何使用WHERE子句过滤数据,GROUP BY子句进行数据分组,HAVING子句过滤分组后的结果,以及ORDER BY子句进行排序。JOIN操作用于将多个表的数据关联在一起,有INNER JOIN(内连接),LEFT JOIN...
* 可移植性:SQL 语言可以在多种不同的数据库管理系统中使用。 2. SQL 数据类型 SQL 语言支持多种数据类型,包括: * 数字类型:int、smallint、tinyint、float、double 等。 * 字符串类型:varchar、char、text ...
- 子查询可以在SELECT、FROM或WHERE子句中使用。 - 示例:`SELECT * FROM employees WHERE id IN (SELECT manager_id FROM employees);` - **在子查询中使用汇总函数:** - 示例:`SELECT department_id FROM ...
学习SQL资料的目的是为了让读者掌握基本的SQL语句及其用法,并了解在使用过程中需要注意的一些特点,同时通过实例加深理解数据库的基础概念。 首先,SQL语句的基本组成部分包括数据操纵语言(DML)、数据定义语言...
- **在SELECT语句中使用子查询**:可以将子查询结果作为列或表的一部分,增强查询能力。 以上内容涵盖了SQL语句查询使用的多个方面,从基础概念到高级功能,旨在帮助读者全面掌握SQL语言,无论是初学者还是有经验的...
- 子查询可以在SELECT、FROM、WHERE等子句中使用。 - 示例: ```sql SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700); ``` - **在子查询...