sql >> Databáze >  >> RDS >> PostgreSQL

Počítejte řádky v oddílu pomocí příkazu Seřadit podle

Když přidáte order by na agregaci používanou jako funkce okna, která se agregace změní na "průběžný počet" (nebo jakýkoli agregační prvek, který používáte).

count(*) vrátí počet řádků až do "aktuálního" na základě zadaného pořadí.

Následující dotaz ukazuje různé výsledky pro agregáty použité s order by . Pomocí sum() místo count() je to trochu lépe vidět (podle mého názoru).

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;

výsledkem bude:

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

Další příklady jsou v příručce Postgres



  1. zachování jednoho připojení k DB nebo uzavření otevření podle potřeby

  2. Jak připojit kontejner webové aplikace Docker ke kontejneru Docker PostgreSQL?

  3. Okamžitě provést změnu proměnné uživatelské vazby

  4. Zobrazit soubor uložený v databázi pomocí php v prohlížeči