如何使用当前行的 column2 值的所有行中 column1 的所有值的列表填充 PostgresQL 列

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

我有一个 Postgres table,格式如下:

水果 所有者
苹果 约翰
橙色 苏珊
迈克尔
桃色 苏珊

我想编写一个查询来创建一个新列 Owner's Fruits,其中列出了相关行所有者拥有的所有水果,如下所示:

水果 所有者 主人的果实
苹果 约翰 苹果
橙色 苏珊 橙色、桃色
迈克尔
桃色 苏珊 橙色、桃色

但是,我不知道该怎么做,甚至不知道如何表达我的问题以便在此处或 Google.

上找到答案

看来应该够简单了吧。我该怎么做?

您可以使用 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;

数组更通用。