【问题标题】:How to populate a PostgresQL column with a list of all values from column1 from all rows with the current row’s value of column2如何使用当前行值为 column2 的所有行中的 column1 中的所有值的列表填充 PostgresQL 列
【发布时间】:2021-09-10 05:19:19
【问题描述】:
我有一个格式如下的 Postgres 表:
| Fruit |
Owner |
| Apple |
John |
| Orange |
Susan |
| Pear |
Michael |
| Peach |
Susan |
我想编写一个查询来创建一个新列Owner's Fruits,其中列出了相关行所有者拥有的所有水果,如下所示:
| Fruit |
Owner |
Owner's Fruits |
| Apple |
John |
Apple |
| Orange |
Susan |
Orange, Peach |
| Pear |
Michael |
Pear |
| Peach |
Susan |
Orange, Peach |
但是,我不知道该怎么做,甚至不知道如何表达我的问题,以便我在这里或谷歌上找到答案。
看起来应该很简单。我该怎么做?
【问题讨论】:
标签:
sql
postgresql
string-aggregation
【解决方案1】:
你可以使用string_agg():
select t.*,
string_agg(fruit, ',') over (partition by owner) as owners_fruits
from t;
也就是说,我实际上建议将值放入数组中:
select t.*,
array_agg(fruit) over (partition by owner) as owners_fruits
from t;
数组更加通用。