PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Oblicz średnią z kolumny JSON

Twoja tablica json jest pomieszana, na przykład @posz skomentował . Musiałoby być:

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]}');

Twoje zapytanie jest również przekręcone na wiele sposobów. Działałoby tak na stronie 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;

Skrzypce SQL.

W nadchodzącej stronie 9.4 możemy uprościć dzięki nowej json_array_elements_text() (również mniej podatny na błędy w obsadzie):

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

Więcej szczegółów:

Poza tym:o wiele bardziej wydajne byłoby przechowywanie tego jako zwykłej tablicy (numeric[] , a nie json ) lub w znormalizowanym schemacie na początek.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Date_trunc w PostgreSQL w mySQL

  2. Agreguj jedną kolumnę w zapytaniu z wieloma kolumnami

  3. Odśwież widoki zmaterializowane:Współbieżność, zachowanie transakcyjne

  4. Drukowanie na ekranie w pliku .sql postgres

  5. Nie można znaleźć nagłówka 'libpq-fe.h podczas próby zainstalowania pg gem