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

Hitung baris dalam partisi dengan Order By

Saat Anda menambahkan order by ke agregat yang digunakan sebagai fungsi jendela yang agregat berubah menjadi "jumlah berjalan" (atau agregat apa pun yang Anda gunakan).

count(*) akan mengembalikan jumlah baris hingga "yang sekarang" berdasarkan urutan yang ditentukan.

Kueri berikut menunjukkan hasil yang berbeda untuk agregat yang digunakan dengan order by . Dengan sum() bukannya count() sedikit lebih mudah untuk dilihat (menurut saya).

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;

akan mengakibatkan:

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

Ada lebih banyak contoh di Panduan Postgres



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlAlchemy:Menanyakan panjang bidang json yang memiliki array

  2. PostgreSQL 9.4 - Gunakan operator khusus dalam batasan EXCLUDE

  3. regexp_matches cara yang lebih baik untuk menghilangkan tanda kurung kurawal

  4. Tingkatkan kinerja kueri PostgreSQL setelah bergabung dengan 100 juta data

  5. Mendapatkan [pengarsip] versi yang tidak didukung (1.13) di header file saat menjalankan pg_restore