Kedudukan Postgres

Kedudukan Postgres



Dalam PostgreSQL, fungsi rank() ialah fungsi Window yang membolehkan kami menetapkan pangkat kepada setiap baris dalam set hasil berdasarkan kriteria pengisihan yang diberikan. Seperti kebanyakan fungsi tetingkap, fungsi pangkat bermanfaat dalam pertanyaan analitikal seperti menentukan kedudukan baris yang relatif kepada yang lain dalam set hasil yang diberikan.

Tutorial ini meneroka tentang cara bekerja dengan fungsi PostgreSQL. Kami juga meneroka sintaks dan parameter fungsi dan melihat beberapa contoh praktikal.

Fungsi Kedudukan PostgreSQL().

Berikut menunjukkan sintaks fungsi rank() dalam PostgreSQL:







RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression [ASC|DESC])

Kita mulakan dengan memanggil fungsi rank(). Kami kemudian menggunakan kata kunci OVER untuk menunjukkan bahawa kami ingin melaksanakan operasi fungsi tetingkap.



Seterusnya ialah PARTITION BY partition_expression. Klausa ini membahagikan baris kepada pelbagai partition berdasarkan ungkapan yang diberikan. Kedudukan dilakukan secara bebas dalam setiap partition di mana nilai integer kedudukan bermula pada 1 untuk setiap partition baharu.



Akhir sekali, kami mempunyai klausa ORDER BY yang menentukan lajur atau ungkapan yang menentukan susunan baris.





Contoh Fungsi Kedudukan PostgreSQL().

Pertanyaan berikut menunjukkan contoh asas menggunakan fungsi rank() PostgreSQL:

PILIH nilai, RANK() OVER (ORDER BY value) SEBAGAI kedudukan
DARI (
NILAI (10), (20), (5), (15), (10)
) AS data(nilai);

Dalam contoh ini, kami menyusun nilai berdasarkan tertib menaiknya. Kedua-dua kemunculan nilai diberikan dengan pangkat yang sama kerana ia serupa dan muncul dalam kedudukan yang sama dalam susunan itu.



Jadual yang terhasil adalah seperti berikut:

PILIH nilai, RANK() OVER (PARTITION BY nilai % 2 ORDER BY nilai) SEBAGAI kedudukan
DARI (
NILAI (10), (20), (5), (15), (10)
) AS data(nilai);

Contoh Fungsi PostgreSQL Rank() dengan Partition By Clause

Pertimbangkan contoh berikut:

PILIH nilai, RANK() OVER (PARTITION BY nilai % 2 ORDER BY nilai) SEBAGAI kedudukan
DARI (
NILAI (10), (20), (5), (15), (10)
) AS data(nilai);

Dalam contoh ini, kami menambah klausa PARTITION BY dengan ungkapan yang menyemak sama ada nilai itu ialah nombor genap atau ganjil. Ini sepatutnya mengumpulkan nilai secara berkesan kepada dua sekatan: satu untuk nombor genap (di mana bakinya ialah 0) dan satu lagi untuk nombor ganjil (di mana bakinya ialah 1).

Set yang terhasil adalah seperti berikut:

Contoh Fungsi Kedudukan PostgreSQL() dengan Menggabungkan Pelbagai Ciri SQL

Anda juga boleh membuat pertanyaan yang lebih kompleks menggunakan fungsi rank(). Sebagai contoh, ambil pangkalan data Pagila. Katakan kami ingin mengambil lima pelanggan teratas berdasarkan jumlah bayaran sewa mereka dan menetapkan pangkat kepada mereka.

Kita boleh menggunakan fungsi rank() seperti yang ditunjukkan dalam pertanyaan berikut:

PILIH customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) SEBAGAI kedudukan
DARI (
PILIH c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
DARIPADA pelanggan c
SERTAI pembayaran p ON c.customer_id = p.customer_id
KUMPULAN OLEH c.customer_id, c.first_name, c.last_name
) SEBAGAI pembayaran_pelanggan
URUTAN MENGIKUT pangkat
HAD 10;

Dalam contoh ini, kami memilih customer_id, first_name, last_name, total_payment dan pangkat yang ditetapkan(). Kemudian, kami menggunakan fungsi rank() untuk menetapkan pangkat kepada setiap pelanggan berdasarkan jumlah_bayaran yang diisih dalam tertib menurun.

Subquery dalaman membolehkan kami mengira jumlah pembayaran untuk setiap pelanggan dengan menyertai pelanggan dan jadual pembayaran. Kami kemudian mengumpulkan hasil berdasarkan lajur customer_id, first_name dan last_name untuk mengambil jumlah pembayaran bagi setiap pelanggan.

Akhir sekali, dalam pertanyaan luar, kami menggunakan fungsi rank() ke atas set hasil dan memesannya mengikut jumlah_bayaran dalam tertib menaik. Kami juga memasukkan klausa had untuk mengambil hanya 10 baris teratas.

Seperti yang anda lihat, anda boleh menjana data yang lebih berwawasan dengan menggabungkan berbilang ciri SQL seperti pengisihan, penapisan, agregat, cantuman dan banyak lagi.

Kesimpulan

Kami meneroka cara kami boleh bekerja dengan fungsi rank() dalam PostgreSQL untuk mengambil pangkat baris tertentu daripada set hasil berdasarkan syarat yang ditetapkan. Kami juga membincangkan cara menggabungkan fungsi rank() dengan alatan SQL yang lain untuk membuat pertanyaan yang lebih kompleks.