PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tính trung bình từ cột JSON

Mảng json của bạn bị rối, chẳng hạn như @posz đã nhận xét . Sẽ phải là:

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

Truy vấn của bạn cũng bị xoắn theo nhiều cách. Sẽ hoạt động như thế này trong pg 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.

Trong pg 9.4 sắp tới chúng ta có thể đơn giản hóa với json_array_elements_text() mới (cũng ít bị lỗi hơn trong dàn diễn viên):

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

Thêm chi tiết:

Ngoài ra:Sẽ hiệu quả hơn nhiều nếu lưu trữ dữ liệu này dưới dạng mảng thuần túy (numeric[] , không phải json ) hoặc trong một lược đồ chuẩn hóa để bắt đầu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chuyển CŨ, MỚI và số nhận dạng để THỰC HIỆN trong một hàm kích hoạt?

  2. Làm thế nào để kết nối giữa các hình ảnh Docker tại thời điểm xây dựng?

  3. gem install pg không hoạt động trên OSX Lion

  4. postgres hstore tồn tại và không tồn tại đồng thời

  5. Postgresql:Ràng buộc duy nhất đối với Liên hợp 2 cột