Postgresql

在 Postgres 中計算 JSONB 數組的平均值

  • July 30, 2021

我的“答案”表中有一個名為“值”的列。

|  value  |
|---------|
|  [1,2]  |
|   [1]   |
| [1,2,3] |

“值”的類型是“jsonb”。

我想得到每一行中每個數組的平均值:

SELECT avg(value) AS avg_value
FROM answers

但這不起作用,因為 avg() 不是 jsonb 函式。我試過了:

SELECT avg(value::integer[]) as avg_value
FROM answers

即嘗試將 jsonb 數組轉換為整數數組,然後取平均值,但出現以下錯誤:“無法將類型 jsonb 轉換為整數

$$ $$. 空值”。 有任何想法嗎?

您需要使用jsonb_array_elements.

您可以在相關子查詢中執行此操作:

SELECT
 (SELECT AVG(value::decimal(18,5))
  FROM jsonb_array_elements(value)
 ) AS avg_value
FROM answers;

DB小提琴

引用自:https://dba.stackexchange.com/questions/297388