簡體   English   中英

在單個 JSONB 查詢中限制和包含

[英]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 條記錄。

您可以根據subqueryrow_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM