PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Hitung rata-rata dari kolom JSON

Array json Anda kacau, seperti komentar @posz . Seharusnya:

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

Permintaan Anda juga dipelintir dalam berbagai cara. Akan bekerja seperti ini di hal 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.

Dalam hal mendatang 9.4 kita dapat menyederhanakannya dengan json_array_elements_text() yang baru (juga kurang rawan kesalahan dalam pemeran):

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

Selengkapnya:

Selain:Akan jauh lebih efisien untuk menyimpan ini sebagai array biasa (numeric[] , bukan json ) atau dalam skema yang dinormalisasi untuk memulai.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG::Error - bidang numerik meluap di Heroku

  2. Kolom byte Postgres mengembalikan string (array char) alih-alih byte array

  3. Pivot pada Beberapa Kolom menggunakan Tablefunc

  4. Django 1.8 Migrasi dengan Postgres BDR 9.4.1

  5. Pemulihan cadangan PostgreSQL dan TimescaleDB menggunakan ClusterControl CLI