【问题标题】:How to specify a limit on Postgres json_agg如何指定 Postgres json_agg 的限制
【发布时间】:2021-04-28 19:28:40
【问题描述】:

我想要一个 JSON 输出,它具有不同的列值和有限的行数。

这是我在 Postgres 数据库中的示例表:

Name       Author     Copies Sold
----       -------     -----------
Book1      James           10
Book2      James           10
Book3      Alex            12
Book4      James           11
Book5      Amanda          1

我想编写一个 SQL 查询,它返回所有唯一作者姓名的列表以及每一行,但限制为 3

这是我目前的 SQL 查询

WITH first_query AS(
    SELECT * FROM sample_table LIMIT 3
)
SELECT json_build_object("all_authors",json_agg(DISTINCT(author)),
                         "book_details",json_agg(row_to_json(first_query))
)
FROM first_query;

这给了我以下输出:

{"all_authors":["James","Alex"],
 "book_details":[{"name":"Book1","author":"James","copies sold":10},
                 {"name":"Book2","author":"James","copies sold":10},
                 {"name":"Book3","author":"Alex","copies sold":12}]}

在上面的输出中,列表中的唯一作者是 James 和 Alex。但是,我想要所有三位作者的姓名,但仍将“book_details”限制为前三位。即我希望阿曼达也能在名单上。

基本上,这是我想要的输出:

{"all_authors":["James","Alex", "Amanda"],
 "book_details":[{"name":"Book1","author":"James","copies sold":10},
                 {"name":"Book2","author":"James","copies sold":10},
                 {"name":"Book3","author":"Alex","copies sold":12}]}

如何获取列的所有不同值并且仍然对查询有限制?

【问题讨论】:

    标签: sql json postgresql common-table-expression


    【解决方案1】:

    你可以这样做;

    with cte as (
    SELECT * FROM books limit 3
    ) 
    SELECT json_build_object('all_authors',json_agg(DISTINCT(author)),'book_details',(select json_agg(row_to_json(cte.*,true)) from cte))
    FROM books
    

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      相关资源
      最近更新 更多