【发布时间】: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