Postgres JSON_AGG 和 Order By 不一起工作

Jor*_*ash 11 postgresql

我有一个看起来像这样的查询:

SELECT *,
(SELECT json_agg(deals.*) FROM deals WHERE vendors.id = deals.vendorid) as deals
FROM vendors
Run Code Online (Sandbox Code Playgroud)

该查询效果很好,但是当我尝试按deals表中的字段进行排序时,如下所示:

SELECT *,
(SELECT json_agg(deals.*) FROM deals WHERE vendors.id = deals.vendorid ORDER BY priority) as deals
FROM vendors
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: column "deals.priority" must appear in the GROUP BY clause or be used in an aggregate function
Run Code Online (Sandbox Code Playgroud)

任何想法如何做这样的排序?

Ry-*_*Ry- 15

你可以

SELECT *,
(SELECT json_agg(deals.* ORDER BY priority) FROM deals WHERE vendors.id = deals.vendorid) as deals
FROM vendors
Run Code Online (Sandbox Code Playgroud)

请参阅带有array_agg和 的示例string_agg


Gor*_*off 4

语法不应该是这样吗?

(SELECT json_agg(deals.*) WITHIN GROUP (ORDER BY priority)
 FROM deals
 WHERE vendors.id = deals.vendorid 
) as deals
Run Code Online (Sandbox Code Playgroud)

文档在这里