在postgres中将字段从一个关系分组到多个关系

时间:2016-11-08 16:00:35

标签: postgresql aggregate aggregate-functions

我需要在postgres的一个查询中对子表中的字段进行分组。

我有以下数据

Stores:

| id | name |
|----|------|
| 1  | abcd |

Features:

| id | store | name | other |
|----|-------|------|-------|
| 1  | 1     | door | metal |
| 2  | 1     | fork | green |

我已经接受了这个查询

SELECT
  stores.id,
  stores.name,
  concate_ws(',', features.id, features.name, features.other)
FROM stores
LEFT JOIN features
  ON(features.store=stores.id)
WHERE stores.id =1
GROUP BY stores.id, features.id;

这是我迄今为止最好的,但产生2个元组

1, abcd, (1,door,metal)
1, abcd, (2,fork,green)

我希望能够获得一行功能' |'如此连接

1, abcd ,(1,door,metal|2,fork,green)

1 个答案:

答案 0 :(得分:0)

使用string_agg()

SELECT stores.id,
       stores.name,
       string_agg(concate_ws(',', features.id, features.name, features.other), '|') 
FROM stores
LEFT JOIN features ON features.store=stores.id
WHERE stores.id =1
GROUP BY stores.id, stores.name;