Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 限制并包含在单个JSONB查询中_Sql_Arrays_Json_Postgresql_Jsonb - Fatal编程技术网

Sql 限制并包含在单个JSONB查询中

Sql 限制并包含在单个JSONB查询中,sql,arrays,json,postgresql,jsonb,Sql,Arrays,Json,Postgresql,Jsonb,我有两个分别运行得很好的查询: 这一点限制了结果: SELECT jsonb_agg(elem) as data FROM ( SELECT * FROM file_data, jsonb_array_elements(file_data) a(elem) LIMIT 3 ) sub; 此过滤器正确运行“contains”过滤器: SELECT jsonb_agg(obj) FROM file_data, jsonb_array_elements(file_data) obj W

我有两个分别运行得很好的查询:

这一点限制了结果:

SELECT jsonb_agg(elem) as data
FROM  (
  SELECT *
  FROM file_data, jsonb_array_elements(file_data) a(elem)
  LIMIT 3
) sub;
此过滤器正确运行“contains”过滤器:

SELECT jsonb_agg(obj)
FROM file_data, jsonb_array_elements(file_data) obj
WHERE obj->>'first_name' LIKE '%M%';
如何组合这些数据,以便选择第一个名称包含M的数据,并将结果限制为X行

这是一个有假数据的测试。我不确定如何继续。

在聚合前使用限制子查询:

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 ;
注意:您可能希望在子查询中添加ORDERBY子句;没有它,就无法预测将拾取哪3条记录。

您可以根据子查询的行数限制json\u agg结果


啊,我离得太近了。我尝试了一些类似的东西,但它返回空值,所以我扔掉了它。不过,您完全正确,这将与排序方法相结合,以便在返回的内容中具有某种形式的可预测性。非常感谢。欢迎@SterlingArcher!
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;