[英]LIMIT and Contains in a single JSONB Query
我有 2 個查詢可以分別完美運行:
這限制了結果:
SELECT jsonb_agg(elem) as data
FROM (
SELECT *
FROM file_data, jsonb_array_elements(file_data) a(elem)
LIMIT 3
) sub;
這個正確運行一個“包含”過濾器:
SELECT jsonb_agg(obj)
FROM file_data, jsonb_array_elements(file_data) obj
WHERE obj->>'first_name' LIKE '%M%';
如何組合這些以便我可以“選擇名字包含 M 的數據,並將結果限制為 X 行”?
這是一個帶有假數據的SQLFiddle來測試它。 我不確定如何進行。
在聚合之前使用limit
子查詢:
select jsonb_agg(obj)
from (
select obj
from file_data, jsonb_array_elements(file_data) obj
where obj->>'first_name' LIKE '%M%'
limit 3
) x ;
注意:您可能想在子查詢中添加order by
子句; 沒有它,就無法預測將選擇哪3 條記錄。
您可以根據subquery
的row_number()
限制json_agg
結果
SELECT jsonb_agg(elem order by elem->>'id' DESC) as data
FROM (
SELECT elem
, row_number() over (order by elem->>'id') as rn
FROM file_data
CROSS JOIN jsonb_array_elements(file_data) a(elem)
WHERE elem->>'first_name' LIKE '%M%'
) subs
WHERE rn <= 3;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.