PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изчислете средната стойност от JSON колона

Вашият json масив е объркан, като @posz коментира . Трябва да бъде:

CREATE TABLE tbl (id int, speed_data json);

INSERT INTO tbl VALUES
  (391982, '{"speed":[1.3,1.3,1.4,1.5]}')
, (391983, '{"speed":[0.9,0.8,0.8,1.0]}');

Вашата заявка също е изкривена по много начини. Ще работи по този начин в стр. 9.3 :

SELECT t.id, avg(x::text::numeric) AS avg_speed
FROM   tbl t
     , json_array_elements(speed_data->'speed') x
GROUP  BY t.id;

SQL Fiddle.

В предстоящата стр. 9.4 можем да опростим с новия json_array_elements_text() (също по-малко податливи на грешки в актьорския състав):

SELECT t.id, avg(x::numeric) AS avg_speed
FROM   tbl t
     , json_array_elements_text(speed_data->'speed') x
GROUP  BY t.id;

Повече подробности:

Настрана:Би било много по-ефективно да съхранявате това като обикновен масив (numeric[] , а не json ) или в нормализирана схема като начало.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо PostgreSQL не харесва имената на таблици с ГОЛИНИ РЕГИСТРИ?

  2. Изчислете резултата от месечните периодични приходи (MRR) с помощта на postgres

  3. PLINQ на ConcurrentQueue не е многонишков

  4. SQL postgres агрегиране/изображение на данни по седмици с общи суми

  5. Проверете дали ред съществува или не в postgresql