如何使用当前行的 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;
数组更通用。
我有一个 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;
数组更通用。