我有一张表格叫做 radio responses
,其中的数据需要进行聚合处理,如下所示:
SELECT question_id, arr FROM radio_responses;
question_id | arr
-------------+-----------------
73 | [1,0,0]
73 | [1,0,0]
73 | [0,1,0]
73 | [0,1,0]
73 | [0,1,0]
73 | [0,0,1]
73 | [0,1,0]
73 | [0,1,0]
73 | [0,0,1]
73 | [0,0,1]
73 | [1,0,0]
74 | [1,0]
74 | [0,1]
74 | [1,0]
74 | [0,1]
74 | [1,0]
74 | [0,1]
77 | [0,1]
77 | [0,1]
77 | [0,1]
我的最终目标是从每个数组中提取
1
的索引。我没有找到任何可用于JSON类型的函数来完成此操作,但我发现如果我有一个int[]
数组,则可以使用idx()
来实现。
我尝试了各种解决方案,但它们似乎都依赖于先取消嵌套数据,这似乎是不必要的,特别是因为在此过程中会丢失信息(除非有什么我错过了使用WITH ORDINALITY
的方法)。
我正在使用Postgres 9.3版本。
with t(x) as (values('[1,0,0]'::json)) select position('1' in translate(x::text,'[],','')) from t;
- Abelisto77 | [0,1] 77 | [0,1] 77 | [0,1]
- e4c5[[2000],[1,0,0],[0,1],[12],[1,1,0]]
,每一行都是如此。我使用交叉连接扩展了它,并使用->
运算符提取与特定问题类型相对应的值。该操作产生的数据仍然是JSON格式。 - Max Candocia