Postgres - 在另一个表中查找每个数组值

时间:2018-02-02 02:59:25

标签: postgresql

假设我有一个表Products,如下所示:

category | items
-----------------
fruit    | {"apple", "banana"}
vegetable| {"carrot"}

和表Prices看起来像:

name   | price
----------------
apple  | 1
banana | 2
carrot | 3

获得输出的最简单方法是:

category | prices
-----------------
fruit    | {1, 2}
vegetable| {3}

随意使用CTE或任何其他细节,使查询易于阅读。

1 个答案:

答案 0 :(得分:1)

使用unnest()获取items数组的元素,这些元素可以与names表的prices结合使用。最后,prices应按category分组:

select category, array_agg(price) as prices
from products
cross join unnest(items) u(item)
join prices on name = item
group by category
order by category;

 category  | prices 
-----------+--------
 fruit     | {1,2}
 vegetable | {3}
(2 rows)    
相关问题