我在表中有一些数据 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 版。
最佳答案
select *
,(select min(i) + 1
from generate_series(0,json_array_length(arr)-1) as gs (i)
where (arr->>i)::int = 1
) as ind
from radio_responses
;
+-------------+---------+-----+
| question_id | arr | ind |
+-------------+---------+-----+
| 73 | [1,0,0] | 1 |
+-------------+---------+-----+
| 73 | [1,0,0] | 1 |
+-------------+---------+-----+
| 73 | [0,1,0] | 2 |
+-------------+---------+-----+
| 73 | [0,1,0] | 2 |
+-------------+---------+-----+
| 73 | [0,1,0] | 2 |
+-------------+---------+-----+
| 73 | [0,0,1] | 3 |
+-------------+---------+-----+
| 73 | [0,1,0] | 2 |
+-------------+---------+-----+
| 73 | [0,1,0] | 2 |
+-------------+---------+-----+
| 73 | [0,0,1] | 3 |
+-------------+---------+-----+
| 73 | [0,0,1] | 3 |
+-------------+---------+-----+
| 73 | [1,0,0] | 1 |
+-------------+---------+-----+
| 74 | [1,0] | 1 |
+-------------+---------+-----+
| 74 | [0,1] | 2 |
+-------------+---------+-----+
| 74 | [1,0] | 1 |
+-------------+---------+-----+
| 74 | [0,1] | 2 |
+-------------+---------+-----+
| 74 | [1,0] | 1 |
+-------------+---------+-----+
| 74 | [0,1] | 2 |
+-------------+---------+-----+
| 77 | [0,1] | 2 |
+-------------+---------+-----+
| 77 | [0,1] | 2 |
+-------------+---------+-----+
| 77 | [0,1] | 2 |
+-------------+---------+-----+
关于sql - 如何在 JSON 数组 (PostgreSQL 9.3) 中查找元素的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41154641/