gpt4 book ai didi

postgresql - Postgres查询结果转json对象

转载 作者:行者123 更新时间:2023-11-29 11:33:10 25 4
gpt4 key购买 nike

下面是我的查询

SELECT w.payload,
Count('payload') OVER () AS ROWCOUNT
FROM wholesale_confirmation.wholesale_order_confirmation w
WHERE w.delivery_date = COALESCE(NULL, w.delivery_date)
AND w.ship_to_location_id = COALESCE(NULL, w.ship_to_location_id)
AND w.order_raised_date = COALESCE(NULL, w.order_raised_date)
AND w.ship_from_location_id = COALESCE(NULL, w.ship_from_location_id)
LIMIT 10
OFFSET 0;

这是给我这样的结果:

Result

我想要 {"payload:[payload1,payload2,payload3],"rowcount":n}


Postgres版本10.3payload数据类型为jsonb

最佳答案

COALESCE(NULL, w.delivery_date) 归结为 w.delivery_date

因此 WHERE w.delivery_date = COALESCE(NULL, w.delivery_date) 归结为 WHERE w.delivery_date IS NOT NULL

Count('payload') OVER () AS ROWCOUNT 只是 count(*) OVER () AS rowcount 的一种嘈杂方式,并返回总行数结果。

您当前的查询,已简化:

SELECT payload, count(*) OVER () AS rowcount
FROM wholesale_confirmation.wholesale_order_confirmation
WHERE delivery_date IS NOT NULL
AND ship_to_location_id IS NOT NULL
AND order_raised_date IS NOT NULL
AND ship_from_location_id IS NOT NULL
LIMIT 10;

要像更新后的问题一样获取一个 JSON 对象,其中包含一个 JSON 对象数组和总行数:

SELECT json_build_object('payload', jsonb_agg(payload), 'rowcount', min(rowcount))
FROM (
SELECT payload, count(*) OVER () AS rowcount
FROM wholesale_confirmation.wholesale_order_confirmation
WHERE delivery_date IS NOT NULL
AND ship_to_location_id IS NOT NULL
AND order_raised_date IS NOT NULL
AND ship_from_location_id IS NOT NULL
LIMIT 10
) sub;

如果您正在处理许多 行,LIMIT/OFFSET 的性能会下降。考虑一种更复杂的分页技术:

关于postgresql - Postgres查询结果转json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49713094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com