如何使用Postgres将行数据转换为另一个表行的单个数组

时间:2017-05-22 12:36:27

标签: sql postgresql aggregation

我有一张表product_sizeproduct_idsizesize_id

另一个表productproduct_idproductname

我想获得如下输出。 例如: -

productname, [20, 25 , 30]

1 个答案:

答案 0 :(得分:0)

目前还不清楚[20, 25 , 30]究竟是什么。我可以想到两个可能的答案,他们在这里:

假设[20, 25 , 30]size_id s,这是一个查询:

SELECT
    productname,
    array_agg(size_id)
FROM
    product
    JOIN product_size
    USING (product_id)
GROUP BY
    productname;

请参阅documentation on Aggregate Functions

假设[20, 25, 30]是产品的尺寸,例如[length, width, height]

SELECT
    productname,
    ARRAY[
        (SELECT size FROM product_size WHERE product_size.product_id = product.product_id AND size_id = 'x'), 
        (SELECT size FROM product_size WHERE product_size.product_id = product.product_id AND size_id = 'y'), 
        (SELECT size FROM product_size WHERE product_size.product_id = product.product_id AND size_id = 'z')
    ]
FROM
    product;