Postgres Rank

Postgres Rank



Στην PostgreSQL, η συνάρτηση rank() είναι μια συνάρτηση παραθύρου που μας επιτρέπει να εκχωρήσουμε μια κατάταξη σε κάθε σειρά μέσα σε ένα σύνολο αποτελεσμάτων με βάση ένα δεδομένο κριτήρια ταξινόμησης. Όπως οι περισσότερες συναρτήσεις παραθύρου, η συνάρτηση κατάταξης είναι ωφέλιμη σε αναλυτικά ερωτήματα, όπως ο προσδιορισμός της κατάταξης μιας σειράς που είναι σχετική με άλλες σε ένα δεδομένο σύνολο αποτελεσμάτων.

Αυτό το σεμινάριο εξερευνά τον τρόπο εργασίας με τις συναρτήσεις PostgreSQL. Εξερευνούμε επίσης τη σύνταξη και τις παραμέτρους της συνάρτησης και εξετάζουμε μερικά πρακτικά παραδείγματα.

Συνάρτηση PostgreSQL Rank().

Το παρακάτω δείχνει τη σύνταξη της συνάρτησης rank() στο PostgreSQL:







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

Ξεκινάμε καλώντας τη συνάρτηση rank(). Στη συνέχεια χρησιμοποιούμε τη λέξη-κλειδί OVER για να υποδείξουμε ότι θέλουμε να εκτελέσουμε μια λειτουργία λειτουργίας παραθύρου.



Ακολουθεί το PARTITION BY partition_expression. Αυτή η ρήτρα διαιρεί τις σειρές σε διάφορα διαμερίσματα με βάση μια δεδομένη έκφραση. Η κατάταξη γίνεται ανεξάρτητα σε κάθε διαμέρισμα όπου η ακέραια τιμή κατάταξης ξεκινά από το 1 για κάθε νέο διαμέρισμα.



Τέλος, έχουμε τον όρο ORDER BY που καθορίζει τη στήλη ή την έκφραση που καθορίζει τη σειρά σειρών.





Παράδειγμα συνάρτησης PostgreSQL Rank().

Το ακόλουθο ερώτημα δείχνει ένα βασικό παράδειγμα χρήσης της συνάρτησης rank() της PostgreSQL:

ΕΠΙΛΟΓΗ τιμής, RANK() OVER (ORDER BY value) ΩΣ κατάταξη
ΑΠΟ (
VALUES (10), (20), (5), (15), (10)
) AS data(value);

Σε αυτό το παράδειγμα, ταξινομούμε τις τιμές με βάση την αύξουσα σειρά τους. Οι δύο εμφανίσεις της τιμής εκχωρούνται με την ίδια κατάταξη καθώς είναι παρόμοιες και εμφανίζονται στην ίδια θέση εντός της παραγγελίας.



Ο πίνακας που προκύπτει έχει ως εξής:

SELECT τιμή, RANK() OVER (PARTITION BY BY value % 2 ORDER BY value) ΩΣ κατάταξη
ΑΠΟ (
VALUES (10), (20), (5), (15), (10)
) AS data(value);

Παράδειγμα συνάρτησης PostgreSQL Rank() με το Partition By Clause

Εξετάστε το ακόλουθο παράδειγμα:

SELECT τιμή, RANK() OVER (PARTITION BY BY value % 2 ORDER BY value) ΩΣ κατάταξη
ΑΠΟ (
VALUES (10), (20), (5), (15), (10)
) AS data(value);

Σε αυτό το παράδειγμα, προσθέσαμε τον όρο PARTITION BY με μια παράσταση που ελέγχει εάν η τιμή είναι άρτιος ή περιττός αριθμός. Αυτό θα πρέπει να ομαδοποιήσει αποτελεσματικά τις τιμές σε δύο διαμερίσματα: ένα για ζυγούς αριθμούς (όπου το υπόλοιπο είναι 0) και το άλλο για περιττούς αριθμούς (όπου το υπόλοιπο είναι 1).

Το σύνολο που προκύπτει έχει ως εξής:

Παράδειγμα συνάρτησης PostgreSQL Rank() με συνδυασμό πολλαπλών δυνατοτήτων SQL

Μπορείτε επίσης να δημιουργήσετε πιο σύνθετα ερωτήματα χρησιμοποιώντας τη συνάρτηση rank(). Για παράδειγμα, πάρτε τη βάση δεδομένων Pagila. Ας υποθέσουμε ότι θέλουμε να φέρουμε τους πέντε κορυφαίους πελάτες με βάση τις συνολικές πληρωμές ενοικίων και να τους εκχωρήσουμε τάξεις.

Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση rank() όπως φαίνεται στο παρακάτω ερώτημα:

SELECT client_id, name_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) ΩΣ κατάταξη
ΑΠΟ (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
ΑΠΟ πελάτη γ
ΕΓΓΡΑΦΗ πληρωμής p ON c.customer_id = p.customer_id
ΟΜΑΔΑ ΑΝΑ c.customer_id, c.first_name, c.last_name
) AS client_payments
ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ βαθμίδα
ΟΡΙΟ 10;

Σε αυτό το παράδειγμα, επιλέγουμε το customer_id, το first_name, το last_name, το total_payment και την εκχωρημένη κατάταξη(). Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση rank() για να εκχωρήσουμε μια κατάταξη σε κάθε πελάτη με βάση το total_payment που ταξινομείται με φθίνουσα σειρά.

Το εσωτερικό υποερώτημα μας επιτρέπει να υπολογίσουμε τις συνολικές πληρωμές για κάθε πελάτη συνδέοντας τους πίνακες πελατών και πληρωμών. Στη συνέχεια, ομαδοποιούμε το αποτέλεσμα με βάση τις στήλες customer_id, first_name και last_name για να ανακτήσουμε το άθροισμα των πληρωμών για κάθε πελάτη.

Τέλος, στο εξωτερικό ερώτημα, εφαρμόζουμε τη συνάρτηση rank() πάνω από το σύνολο αποτελεσμάτων και την παραγγέλνουμε κατά total_payments σε αύξουσα σειρά. Περιλαμβάνουμε επίσης την ρήτρα ορίου για τη λήψη μόνο των 10 κορυφαίων σειρών.

Όπως μπορείτε να δείτε, μπορείτε να δημιουργήσετε πιο διορατικά δεδομένα συνδυάζοντας πολλαπλές δυνατότητες SQL, όπως ταξινόμηση, φιλτράρισμα, συγκεντρώσεις, ενώσεις και άλλα.

συμπέρασμα

Εξερευνήσαμε πώς μπορούμε να δουλέψουμε με τη συνάρτηση rank() στην PostgreSQL για να ανακτήσουμε την κατάταξη μιας δεδομένης σειράς από ένα σύνολο αποτελεσμάτων με βάση τις καθορισμένες συνθήκες. Καλύψαμε επίσης τον τρόπο συνδυασμού της συνάρτησης rank() με άλλα εργαλεία SQL για τη δημιουργία πιο σύνθετων ερωτημάτων.