如何在PostgreSQL中“分组”具有相同属性的列结果?

时间:2015-11-24 13:17:55

标签: postgresql

我有几个表,主表有一个名为“id”的属性,而thing表有一个名为“id_main”的属性。主要项目可能有多个东西。一件事可能只有一个主要。我如何使用main的每个东西获得一个数组?我的查询有效,但返回的东西数量很多,它包含主要属性的副本,每个属性都有不同的关系。这是我的问题:

SELECT
    m.id
    , x.color
    , t.volume
    , t.age
FROM main m
LEFT JOIN extra x
ON x.id = m.id
LEFT JOIN thing t
ON t.id = m.id
WHERE m.id = 1234; 

它正在回归:

{id: 1234, color: 'red', volume: '8', age: '10'} 
{id: 1234, color: 'red', volume: '3', age: '25'} 
{id: 1234, color: 'red', volume: '19', age: '152'} 

我想得到:

{id: 1234, color: 'red', things:[{volume:'8', age:'10'}, {volume:'3', age:'25'}, {volume:'19', age:'152'}]}

或者尽可能接近。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您可以灵活地将'音量'和'年龄'拆分为2个数组,那么您的选择可能如下所示:

SELECT
    m.id
    , x.color
    , array_agg(t.volume) as t_volume
    , array_agg(t.age) as t_age
FROM main m
LEFT JOIN extra x
ON x.id = m.id
LEFT JOIN thing t
ON t.id = m.id
WHERE m.id = 1234
GROUP BY m.id, x.color;