Eu tenho uma coluna chamada "valor" na minha tabela "respostas".
| value |
|---------|
| [1,2] |
| [1] |
| [1,2,3] |
O tipo de "valor" é "jsonb".
Eu quero obter o valor médio de cada array em cada linha:
SELECT avg(value) AS avg_value
FROM answers
Mas isso não funciona porque avg() não é uma função jsonb. Eu tentei:
SELECT avg(value::integer[]) as avg_value
FROM answers
ou seja, tentei converter as matrizes jsonb em matrizes inteiras e, em seguida, obter o avg, mas recebo o seguinte erro: "não é possÃvel converter o tipo jsonb para integer[]. null".
Alguma ideia?
Você precisa desaninhar a matriz JSON com
jsonb_array_elements
.Você pode fazer isso em uma subconsulta correlacionada:
DB Fiddle