Peringkat Postgres

Peringkat Postgres



Di PostgreSQL, fungsi rank() adalah fungsi Window yang memungkinkan kita untuk menetapkan peringkat ke setiap baris dalam kumpulan hasil berdasarkan kriteria pengurutan yang diberikan. Seperti kebanyakan fungsi jendela, fungsi peringkat bermanfaat dalam kueri analitik seperti menentukan peringkat baris yang relatif terhadap yang lain dalam kumpulan hasil yang diberikan.

Tutorial ini membahas tentang cara bekerja dengan fungsi PostgreSQL. Kami juga mengeksplorasi sintaks dan parameter fungsi dan melihat beberapa contoh praktis.

PostgreSQL Rank() Fungsi

Berikut ini adalah sintaks dari fungsi rank() di PostgreSQL:







PERINGKAT() LEBIH (PARTISI DENGAN ekspresi_partisi ORDER OLEH sort_expression [ASC|DESC])

Kita mulai dengan memanggil fungsi rank(). Kami kemudian menggunakan kata kunci OVER untuk menunjukkan bahwa kami ingin melakukan operasi fungsi jendela.



Berikutnya adalah PARTITION BY partition_expression. Klausa ini membagi baris menjadi berbagai partisi berdasarkan ekspresi yang diberikan. Pemeringkatan dilakukan secara independen di setiap partisi di mana nilai integer peringkat dimulai dari 1 untuk setiap partisi baru.



Terakhir, kita memiliki klausa ORDER BY yang menentukan kolom atau ekspresi yang menentukan urutan baris.





Contoh Fungsi PostgreSQL Rank()

Kueri berikut menunjukkan contoh dasar penggunaan fungsi rank() PostgreSQL:

Nilai SELECT, RANK() OVER (ORDER BY value) peringkat AS
DARI (
NILAI (10), (20), (5), (15), (10)
) data AS(nilai);

Dalam contoh ini, kami mengurutkan nilai berdasarkan urutan menaiknya. Dua kemunculan nilai diberi peringkat yang sama karena serupa dan muncul di posisi yang sama dalam urutan.



Tabel yang dihasilkan adalah sebagai berikut:

Nilai SELECT, RANK() OVER (PARTITION BY value % 2 ORDER BY value) Peringkat AS
DARI (
NILAI (10), (20), (5), (15), (10)
) data AS(nilai);

Contoh Fungsi PostgreSQL Rank() dengan Partition By Clause

Pertimbangkan contoh berikut:

Nilai SELECT, RANK() OVER (PARTITION BY value % 2 ORDER BY value) Peringkat AS
DARI (
NILAI (10), (20), (5), (15), (10)
) data AS(nilai);

Dalam contoh ini, kami menambahkan klausa PARTITION BY dengan ekspresi yang memeriksa apakah nilainya genap atau ganjil. Ini harus secara efektif mengelompokkan nilai menjadi dua partisi: satu untuk angka genap (di mana sisanya adalah 0) dan yang lainnya untuk angka ganjil (di mana sisanya adalah 1).

Set yang dihasilkan adalah sebagai berikut:

Contoh Fungsi PostgreSQL Rank() dengan Menggabungkan Beberapa Fitur SQL

Anda juga dapat membuat kueri yang lebih kompleks menggunakan fungsi rank(). Misalnya, ambil basis data Pagila. Misalkan kita ingin mengambil lima pelanggan teratas berdasarkan total pembayaran sewa mereka dan memberikan peringkat kepada mereka.

Kita dapat menggunakan fungsi rank() seperti yang ditunjukkan dalam kueri berikut:

PILIH customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) peringkat AS
DARI (
PILIH c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
DARI pelanggan c
GABUNG pembayaran p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS pelanggan_pembayaran
ORDER BERDASARKAN peringkat
BATAS 10;

Dalam contoh ini, kita memilih customer_id, first_name, last_name, total_payment, danassigned rank(). Kemudian, kami menggunakan fungsi rank() untuk menetapkan peringkat ke setiap pelanggan berdasarkan total_payment yang diurutkan dalam urutan menurun.

Subquery dalam memungkinkan kita menghitung total pembayaran untuk setiap pelanggan dengan menggabungkan tabel pelanggan dan pembayaran. Kami kemudian mengelompokkan hasil berdasarkan kolom customer_id, first_name, dan last_name untuk mengambil jumlah pembayaran untuk setiap pelanggan.

Terakhir, di kueri luar, kami menerapkan fungsi rank() di atas kumpulan hasil dan mengurutkannya dengan total_payments dalam urutan menaik. Kami juga menyertakan klausa batas untuk hanya mengambil 10 baris teratas.

Seperti yang Anda lihat, Anda bisa menghasilkan data yang lebih mendalam dengan menggabungkan beberapa fitur SQL seperti pengurutan, pemfilteran, agregat, gabungan, dan lainnya.

Kesimpulan

Kita menjelajahi bagaimana kita dapat bekerja dengan fungsi rank() di PostgreSQL untuk mengambil peringkat baris tertentu dari hasil yang ditetapkan berdasarkan kondisi yang ditentukan. Kami juga membahas cara menggabungkan fungsi rank() dengan alat SQL lainnya untuk membuat kueri yang lebih kompleks.