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

Bagaimana cara mengurangi baris hasil kueri SQL secara merata dalam rentang penuh?

Di Posgres , width_bucket() adalah hal yang Anda cari - untuk menggranulasi sejumlah baris (N ) di tabel di bawahnya ke dalam tabel tertentu (sebaiknya lebih kecil ) jumlah titik data (n ). Anda dapat menambahkan jumlah baris yang berkontribusi pada setiap titik data untuk menandakan bobot.

Satu kendala kecil:Varian width_bucket() kita perlu beroperasi pada double precision atau numeric angka, bukan di timestamp dkk. Cukup ekstrak Epoch untuk bekerja dengan.

Dengan asumsi definisi tabel ini dan versi Postgres saat ini:

CREATE TABLE tbl (
  tbl_id serial PRIMARY KEY
, value  numeric NOT NULL
, created_at timestamptz NOT NULL
);

Kueri:

SELECT width_bucket(extract(epoch FROM t.created_at), x.min_epoch, x.max_epoch, 400) AS pix
     , round(avg(t.value), 2) AS avg  -- round is optional
     , count(*) AS weight
FROM   big t
CROSS  JOIN (SELECT extract(epoch FROM min(created_at)) AS min_epoch
                  , extract(epoch FROM max(created_at)) AS max_epoch FROM big) x
GROUP  BY 1
ORDER  BY 1;

Hasil:

pix | avg    | weight
----+--------+------
1   | 152.58 | 7
2   | 155.16 | 8
3   | 148.89 | 7
...

Mengembalikan 400 baris - kecuali N <n , dalam hal ini Anda mendapatkan N baris.

Terkait:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate 4 dan Postgres :Bagaimana cara membuat urutan per tabel?

  2. Fungsi atas Postgres pada karakter Turki tidak mengembalikan hasil yang diharapkan

  3. Skrip PHP dengan perintah PostgreSQL mengembalikan NULL untuk data Json

  4. Indeks teks lengkap yang tepat Rails/PostgreSQL/pg_search

  5. Bagaimana cara menghubungkan C# dengan Postgres?