【发布时间】:2016-11-17 10:48:52
【问题描述】:
如何对使用 json 聚合的子查询的结果进行排序?
如果我有这样的架构:
CREATE TABLE plans( id integer NOT NULL, name character varying(255));
CREATE TABLE plan_items ( id integer NOT NULL, plan_id integer NOT NULL, expected_at date, status integer);
我正在通过子查询在 json 列上聚合 plan_items 结果。 像这样:
SELECT
plans.id,
plans.name,
jsonb_agg((SELECT pi_cols FROM
(SELECT plan_items.id, plan_items.expected_at, plan_items.status) pi_cols
)) AS plan_items_data
FROM
plans
INNER JOIN plan_items ON plan_items.plan_id = plans.id
GROUP BY
plans.id,
plans.name
ORDER BY plans.id;
JSON 聚合按预期工作,并为我提供所需的结果。行。 但我无法订购结果。
我试过了:
jsonb_agg((SELECT pi_cols FROM
(SELECT plan_items.id, plan_items.expected_at, plan_items.status ORDER BY plan_items.expected_at) pi_cols
)) AS plan_items_data
还有:
jsonb_agg((SELECT pi_cols FROM
(SELECT plan_items.id, plan_items.expected_at, plan_items.status) pi_cols ORDER BY pi_cols.expected_at
)) AS plan_items_data
但这些都没有解决。
有什么想法吗?
【问题讨论】:
-
尝试使用聚合的扩展形式:
jsonb_agg(... order by plan_items.expected_at)
标签: json postgresql subquery