2016-11-08 79 views
0

我需要在postgres中的一个查询中将子表中的字段分组。在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) 

回答

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; 
相关问题