问题描述
tab1
name marks
rb 34
km 434
rn 343
sm 343
sm 545
rb 33
km 22
jl 234
name marks
jl 234
km 434,22
rb 34,33
rn 343
sm 343,545
解决方法
请具体说明您需要的数据库!鉴于您没有分享有关使用哪个数据库的足够信息,我只能举一个不同 SQL 语法的示例。以下是我对不同数据库所做的总结。
MySQL
使用 group_concat 建立新的组
select name,group_concat(marks)
from test
group by name
SQL Server
需要先将 marks
转换为字符串类型,然后再连接,使用 name
作为连接键。
SELECT DISTINCT
name,Stuff((SELECT ',' + cast(marks as varchar)
FROM test t2
WHERE t2.name = t1.name
FOR XML PATH('')),1,'') marks
FROM test t1
SQL Server 2017 及更高版本
有一个函数string_agg,你可以指定一个分隔符来对行进行分组
select name,string_agg(marks,',')
from test
group by name
Postgres 9.3+
SELECT name,array_agg(marks) as marks
FROM test
GROUP BY name
,
在 oracle 中,您可以使用 listagg
和 group by 如下:
Select name,Listagg(marks,') within group (order by marks) as marks
From your_tablr
Group by name
,
在 Postgres 中,您将使用 string_agg()
select name,string_agg(marks::text,') as marks
from the_table
group by name
order by name;