繁体   English   中英

sql - PostgreSQL 9.6 中的 GROUP_CONCAT

[英]sql - GROUP_CONCAT in PostgreSQL 9.6

我有一张表,我想为每个 id 拉出一行,并将字段值连接起来。

例如,在我的表中,我有这个:

SELECT objects.id, objects.title, categories.name,
       (SELECT COUNT(0) FROM comments WHERE comments.object_id = objects.id) as count
FROM objects 
LEFT JOIN restaurant_properties ON restaurant_properties.object_id = objects.id
LEFT JOIN categories on categories.id = restaurant_properties.category_id
WHERE type_id = 2 


id | title      | category_name | count |

12 | Tosca      | Cafe          | 0     |
12 | Tosca      | Bar           | 0     |
12 | Tosca      | Pizza         | 0     |
11 | Green Cafe | Cafe          | 0     |
11 | Green Cafe | Tea House     | 0     |

我想输出:

id | title      | category_name    | count |

12 | Tosca      | Cafe, Bar, Pizza | 0     |
11 | Green Cafe | Cafe, Tea House  | 0     |

当我使用 GROUP BY "name" 时,它给了我一个错误:

[Err] 错误:“objects.id”列必须出现在 GROUP BY 子句中或用于聚合函数中

聚合查询应该可以使用STRING_AGG()

SELECT o.id, o.title, STRING_AGG(c.name, ', ') as categories,
       (SELECT COUNT(*) FROM comments co WHERE co.object_id = o.id) as count
FROM objects o LEFT JOIN 
     restaurant_properties rp
     ON rp.object_id = o.id LEFT JOIN
     categories c
     ON c.id = rp.category_id
WHERE type_id = 2 
GROUP BY o.id, o.title

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM