将输入作为单个参数从postgresql中的JSON数组列中筛选出所需的JSON对象

将输入作为单个参数从postgresql中的JSON数组列中筛选出所需的JSON对象,postgresql,Postgresql,我有一个select查询返回,它显示如下结果: 从表中选择*给出如下结果 我有一个名为Apple的参数,如果我在查询中的某个地方传递该参数,我将得到如下结果 如何在postgresql中获取此信息。如果有人知道,请分享下面的答案。考虑到column_JSONARRAY的数据类型是JSONB,请尝试以下方法: with cte as ( SELECT column_a, column_b, (column_jsonarray ->> ( index_-1 )::int)::js

我有一个select查询返回,它显示如下结果:

从表中选择*给出如下结果

我有一个名为Apple的参数,如果我在查询中的某个地方传递该参数,我将得到如下结果


如何在postgresql中获取此信息。如果有人知道,请分享下面的答案。

考虑到column_JSONARRAY的数据类型是JSONB,请尝试以下方法:

with cte as (
   SELECT column_a, column_b,  (column_jsonarray ->> ( index_-1 )::int)::jsonb  AS "column_jsonarray"
     FROM table_
    CROSS JOIN jsonb_array_elements(column_jsonarray)
     WITH ORDINALITY arr(array_,index_)
    WHERE array_->>'fruit' in ('Apple') 
)

select t1.column_a, t1.column_b, jsonb_agg(t2.column_jsonarray) 
from table_ t1 
left join cte t2 on t1.column_a =t2.column_a and t1.column_b =t2.column_b

group by t1.column_a, t1.column_b

为了清晰起见,我会使用一个helper函数。而且它可能是可重复使用的

创建或替换函数过滤器\u jsonb\u arrayarr jsonb,结果文本 返回jsonb语言sql不可变为 $$ 选择合并 从jsonb_数组_elementsarr j中选择jsonb_aggj,其中j->>'fruit'=fruit, “[]”:jsonb ; $$; 然后

从表中选择列A、列B、过滤器列B、阵列列J、阵列“苹果”; 如果不需要函数,则可以将函数体直接放入select查询中

选择 A栏, (B)栏,, 合并 从jsonb_数组元素列JSONARRAY j中选择jsonb_aggj,其中j->>“水果”=“苹果”, “[]”:jsonb 柱状图 从表1;
样本数据最好以如下方式表示。有关如何创建美观的表的一些提示,请参阅。PostgreSQL 10.10在x86_64-pc-linux-gnu上,由gcc gcc 4.8.3 20140911 Red Hat 4.8.3-9编译,64位biti使用了第二个选项,该选项未使用函数,非常好。但我接下来要关心的是,如果水果的日期类型是一个字符,我应该使用什么?我在“mango”=ANYj->>“fruit”中尝试了这个方法,但无法从jsonb\u数组\u元素\u textj->“fruit”t::text[]获得正确的结果。只有当水果是一个数组时,它才会起作用。我得到了我所期望的答案。最后一个问题是,我想在参数中使用函数的下限。怎么做?我宁愿降低参数和数组值。就是这样。其中lower'Mango'=anyselect array\u agcowert from jsonb\u array\u elements\u textj->'fruit't::text[]你是个天才。我所寻找的,我完全得到了。非常感谢你