基于 GROUP 中的列构建字符串
Building a string based on columns from a GROUP
我有一个 table 这样的:
user 1 A
user 1 B
user 2 H
user 2 G
user 2 A
我需要这样的结果:
user 1 AB
user 2 HGA
有没有办法得到这样的结果?
所以这里我们创建一些测试数据
CREATE TABLE foo AS
SELECT * FROM (
VALUES (1,'A'),(1,'B'),(2,'H'),(2,'G'),(2,'A')
) AS f(id,col);
这应该有效,
SELECT id, array_to_string(array_agg(col), '')
FROM table
GROUP BY id;
这是我们正在做的,
- 按 ID 分组。
- 使用
array_agg
构建该列的 PostgreSQL text[]
(文本数组)
- 通过在空字符串 '' 上加入
array_to_string
,将数组转换回文本。
您也可以使用string_agg
,
SELECT id, string_agg(col, '')
FROM foo
GROUP BY id;
更好的解决方案是使用 str_sum
聚合函数
select
user,
str_sum(column_name,'')
from table_name
group by user;
我有一个 table 这样的:
user 1 A
user 1 B
user 2 H
user 2 G
user 2 A
我需要这样的结果:
user 1 AB
user 2 HGA
有没有办法得到这样的结果?
所以这里我们创建一些测试数据
CREATE TABLE foo AS
SELECT * FROM (
VALUES (1,'A'),(1,'B'),(2,'H'),(2,'G'),(2,'A')
) AS f(id,col);
这应该有效,
SELECT id, array_to_string(array_agg(col), '')
FROM table
GROUP BY id;
这是我们正在做的,
- 按 ID 分组。
- 使用
array_agg
构建该列的 PostgreSQL - 通过在空字符串 '' 上加入
array_to_string
,将数组转换回文本。
text[]
(文本数组)
您也可以使用string_agg
,
SELECT id, string_agg(col, '')
FROM foo
GROUP BY id;
更好的解决方案是使用 str_sum
聚合函数
select
user,
str_sum(column_name,'')
from table_name
group by user;