PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да намалим еднакво редовете с резултати на SQL заявка в пълен диапазон?

В Postgres , width_bucket() е точно това, което търсите - да гранулирате произволен брой редове (N ) в основната таблица в даден (за предпочитане по-малък ) брой точки с данни (n ). Можете да добавите броя на редовете, допринасящи за всяка точка от данни, за да обозначите теглото.

Едно незначително препятствие:Вариантът на width_bucket() трябва да работи с double precision или numeric числа, а не на timestamp et al. Просто извлечете епохата за работа.

Приемайки тази дефиниция на таблица и текуща версия на Postgres:

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

Заявка:

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;

Резултат:

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

Връща 400 реда - освен ако N <n , в който случай получавате N редове.

Свързани:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ляво външно съединение, действащо като вътрешно съединение

  2. LibreOffice Calc изпълнява PostgreSQL функция

  3. Съхранявайте и индексирайте YAML с PostgreSQL, с Javascript lib или функции за многократна употреба?

  4. Превключване/Обратно превключване в Slony-I при надграждане на основните версии на PostgreSQL 8.4.x/9.3.x

  5. Върната стойност кръстосано съединяване