pra*_*gil 6 postgresql pagination aggregate-functions sql-limit jsonb
我的查询如下
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;
Run Code Online (Sandbox Code Playgroud)
这给了我这样的结果:
我想要{"payload:"[payload1,payload2,payload3],"rowcount":n}
。
Postgres 10.3版,payload
数据类型为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;
Run Code Online (Sandbox Code Playgroud)
要获取像更新问题中那样的 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;
Run Code Online (Sandbox Code Playgroud)
如果您正在处理很多LIMIT
行,则/ 的性能会OFFSET
降低。考虑更复杂的分页技术:
归档时间: |
|
查看次数: |
8711 次 |
最近记录: |