json - Postgresql jsonb_agg 子查询排序

标签 json postgresql subquery

如何对使用 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);

我正在通过子查询将 plan_items 结果聚合到 json 列上。 像这样:

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

但这些都没有解决。

有什么想法吗?

最佳答案

作为Abelisto建议,只需使用一个简单的 aggregate expression with ordering :

jsonb_agg(plan_items ORDER BY plan_items.expected_at) AS plan_items_data

关于json - Postgresql jsonb_agg 子查询排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40652871/

相关文章:

c - 为 PostgreSQL 9.6 编译 C 函数时出错

子查询中具有多部分标识符问题的 SQL 查询

javascript - 将函数分配给 JSON 属性

java - 如何在ajax中从jsp返回列表作为JSON对象?

javascript - 如何使用 *ngFor 循环 [object Object]

sql - PSQL 将 jsonb 属性更新为当前值

sql - 使用本地文件在远程数据库中执行 COPY 命令

javascript - JSON 更改时如何更新

sql - ISNULL、IIF、CASE 语句中的子查询

mysql - 从子查询mysql中选择数据