oracle、postgresql、mysql行转列的内置函数

1、需求描述

查询人员的年龄

1
select t.age,t.name from table_name t where t.age = 20;
age name
16 Jack
16 Jones
16 Mark
16 Lucy
16 Adams

要达到的效果:

age names
16 Jack,Jones,Mark,Lucy,Adams

2、解决方案

1)oracle:listagg() within group()

1
2
3
select t.age, listagg(t.name, ',') within group (order by t.name) names
from table_name t
where t.age = 20 group by t.age

2) postgresql:string_agg()

1
2
3
select t.age, string_agg(t.name, ',') as names
from table_name t
where t.age = 20 group by t.age

3) mysql:group_concat()

1
2
3
select t.age, group_concat(t.name order by t.name separator ',') as names
from table_name t
where t.age = 20 group by t.age