sql - 如何在 JSON 数组 (PostgreSQL 9.3) 中查找元素的索引?

标签 sql arrays json postgresql postgresql-9.3

我在表中有一些数据 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/

相关文章:

sql - 如何从多表查询中进行COUNT(*)?

C++ 字符串到整数问题使用 atoi(str.c_str())

java-如何从字符串中取出json数据

javascript - 如何修复 chop 的字符串 json 以便能够再次解析它

sql - 在列级 FOR​​EIGN KEY 约束中指定了多个键

拥有数千张表的 MySQL 数据库

javascript - 当给定多维数组的坐标索引时,如何计算这些坐标?

java - 尝试理解声明数组的不同方式

json - httr 库中的 POST 方法与 R 中的特定 header

SQL 问题 : Calculating percentages and using multiple joins to the same table