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

Policz wiersze w partycji za pomocą Order By

Gdy dodasz order by do agregatu używanego jako funkcja okna, która agregacja zamienia się w "działający licznik" (lub dowolny agregat, którego używasz).

count(*) zwróci liczbę wierszy aż do „bieżącego” na podstawie określonej kolejności.

Poniższe zapytanie pokazuje różne wyniki dla agregatów używanych z order by . Z sum() zamiast count() jest trochę łatwiej zobaczyć (moim zdaniem).

with test (id, num, x) as (
  values 
    (1, 4, 1),
    (2, 4, 1),
    (3, 5, 2),
    (4, 6, 2)
)
select id, 
       num,
       x,
       count(*) over () as total_rows, 
       count(*) over (order by id) as rows_upto,
       count(*) over (partition by x order by id) as rows_per_x,
       sum(num) over (partition by x) as total_for_x,
       sum(num) over (order by id) as sum_upto,
       sum(num) over (partition by x order by id) as sum_for_x_upto
from test;

spowoduje:

id | num | x | total_rows | rows_upto | rows_per_x | total_for_x | sum_upto | sum_for_x_upto
---+-----+---+------------+-----------+------------+-------------+----------+---------------
 1 |   4 | 1 |          4 |         1 |          1 |           8 |        4 |              4
 2 |   4 | 1 |          4 |         2 |          2 |           8 |        8 |              8
 3 |   5 | 2 |          4 |         3 |          1 |          11 |       13 |              5
 4 |   6 | 2 |          4 |         4 |          2 |          11 |       19 |             11

Więcej przykładów można znaleźć w podręczniku Postgresa



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje sposób na uruchomienie zadania Flyway z wyłączeniem niektórych tabel?

  2. PostgreSQL 9.3:Łącz dwie kolumny w jednej

  3. SQLite działa, ale zmigrowana baza danych PostgreSQL powoduje BŁĄD - Django 3.0

  4. Importuj dane Postgres do RDS za pomocą S3 i aws_s3

  5. Typ ORM FindOperators z transformatorem