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

Jak zredukować wiersze wynikowe zapytania SQL w pełnym zakresie?

W Postgresie , width_bucket() jest właśnie tym, czego szukasz - granulować dowolną liczbę rzędów (N ) w tabeli bazowej na podany (najlepiej mniejszy ) liczba punktów danych (n ). Możesz dodać liczbę wierszy przyczyniających się do każdego punktu danych, aby określić wagę.

Jedna niewielka przeszkoda:wariant width_bucket() potrzebujemy operować na double precision lub numeric numery, a nie na timestamp i in. Po prostu wyodrębnij epokę do pracy.

Zakładając tę ​​definicję tabeli i aktualną wersję Postgresa:

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

Zapytanie:

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;

Wynik:

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

Zwraca 400 wierszy - chyba że N <n , w takim przypadku otrzymasz N wiersze.

Powiązane:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uwierzytelnianie hasła Postgres nie powiodło się

  2. Nie można wstawić JSON z PostgreSQL do Elasticsearch. Pojawia się błąd — „Wyjątek podczas wykonywania zapytania JDBC”

  3. Strumień pobrany z Postgresa z jOOQ nie zwraca wyników z zajęć

  4. Grib2 na raster PostGIS — czy ktoś ma to zadziałać?

  5. w postgres select zwrócić podzapytanie kolumny jako tablicę?