wm_concat怎么转换成mysql_PostgreSQL 基础:如何进行行列转换实现类MySQL的 group_concat 功能...

在数据库开发和查询中,我们经常需要进行行列转换,将具有一定相同属性的数据进行聚合展示。任何数据库都是一致的。

73053fcaafd05c5f85bd60e5b18bae07.png

在 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

参考连接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值