PostgreSQL 基础:行列转换实现类MySQL的 group_concat 功能
在数据库开发和查询中,我们经常需要进行行列转换,将具有一定相同属性的数据进行聚合展示。任何数据库都是一致的。

在 MySQL中存在一个函数 : Group_Concat 可以用于实现类似的功能。
mysql> select error_code,group_concat(db_version order by db_version) from oracode
where error_code='ORA-04031' group by error_code;
+------------+----------------------------------------------+
| error_code | group_concat(db_version order by db_version) |
+------------+----------------------------------------------+
| ORA-04031 | 10g,11g,12c |
+------------+----------------------------------------------+
1 row in set (0.01 sec)
在 PostgreSQL 中,可以通过 array_to_string 进行转换:
enmotech=# select error_code,array_to_string(array_agg(db_version),',') from oracode
where error_code='ORA-04031' group by error_code;
error_code | array_to_string
------------+-----------------
ORA-04031 | 11g,19c
(1 row)
在 Oracle 数据库中,曾经可以通过 wm_concat 进行转换(不再推荐这个方法),但是现在已经被 LISTAGG 替代。
SQL> select wmsys.wm_concat(username) from dba_users;
WMSYS.WM_CONCAT(USERNAME)
--------------------------------------------------------------------------------
SYS,SYSTEM,YANGTK,TEST,OUTLN,MGMT_VIEW,FLOWS_FILES,MDSYS,ORDSYS,EXFSYS,DBSNMP,WM
SELECT deptno,
LISTAGG(ename, ',') WITHIN GROUP(ORDER BY ename) AS employees
FROM scott.emp GROUP BY deptno;
DEPTNO EMPLOYEES
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES,SCOTT,SMITH
30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
参考连接:
- 2018-09-16 Oracle 的 X$ 表之:x$kqfta 内核SQL固定表信息
- 2010-09-16 Oracle PSU (Patch Set Update) 笔记
- 2009-09-16 SUN + Oracle推出Exadata 2 终止与HP的合作
- 2009-09-16 CBO的魔术 - 一个错误的索引选择会带来的后果
- 2008-09-16 《深入浅出Oracle》被某大学选为教材
- 2007-09-16 结束IT168《循序渐进Oracle》技术交流会
- 2005-09-16 Tom's New book has landed
- 2004-09-16 关于Oracle9i的Peeking of User-Defined Bind Variables