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;