如何指定 Postgres 的限制 json_agg
How to specify a limit on Postgres json_agg
我想要一个 JSON 具有不同列值和有限行数的输出。
这是我在 Postgres 数据库中的示例 table:
Name Author Copies Sold
---- ------- -----------
Book1 James 10
Book2 James 10
Book3 Alex 12
Book4 James 11
Book5 Amanda 1
我想编写一个 SQL 查询,该查询 returns 所有唯一作者姓名的列表以及每一行,但限制为 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}]}
如何获取列的所有不同值并且仍然对查询有限制?
这里是你如何做到的;
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
我想要一个 JSON 具有不同列值和有限行数的输出。
这是我在 Postgres 数据库中的示例 table:
Name Author Copies Sold
---- ------- -----------
Book1 James 10
Book2 James 10
Book3 Alex 12
Book4 James 11
Book5 Amanda 1
我想编写一个 SQL 查询,该查询 returns 所有唯一作者姓名的列表以及每一行,但限制为 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}]}
如何获取列的所有不同值并且仍然对查询有限制?
这里是你如何做到的;
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