Συνάρτηση SQL DENSE_RANK().

Synartese Sql Dense Rank



Οι συναρτήσεις παραθύρου είναι ένα κρίσιμο χαρακτηριστικό στην SQL και διαδραματίζουν θεμελιώδη ρόλο σε πολύπλοκους υπολογισμούς δεδομένων και λειτουργίες σε βάσεις δεδομένων SQL. Μία από τις συναρτήσεις στις συναρτήσεις του παραθύρου SQL είναι η dense_rank().

Η συνάρτηση DENSE_RANK() μας επιτρέπει να εκχωρήσουμε μια μοναδική κατάταξη σε κάθε γραμμή μέσα σε ένα σύνολο αποτελεσμάτων με βάση τις τιμές σε μια ακόμη καθορισμένη στήλη. Είναι πολύ παρόμοια με τη συνάρτηση rank() αλλά με μικρές διαφορές στον τρόπο με τον οποίο η συνάρτηση χειρίζεται τις διπλές εγγραφές.

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







Πως δουλεύει

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



Η συνάρτηση λειτουργεί αναθέτοντας μια κατάταξη σε κάθε σειρά στο σύνολο αποτελεσμάτων ξεκινώντας από την κατάταξη 1 και αυξάνοντας κατά 1 για κάθε μοναδική τιμή στις στήλες.



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





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

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



Σύνταξη συνάρτησης:

Τα παρακάτω περιγράφουν τη σύνταξη της συνάρτησης dense_rank():

DENSE_RANK() OVER (

[ΔΙΑΜΕΡΙΣΜΑ ΚΑΤΑ partition_expression, ... ]

ΣΕΙΡΑ ΚΑΤΑ sort_expression [ASC | DESC], ...

)

Στη δεδομένη σύνταξη:

  1. Ξεκινάμε με την ίδια τη συνάρτηση dense_rank().
  2. Η ρήτρα OVER σηματοδοτεί την έναρξη των προδιαγραφών λειτουργίας παραθύρου. Αυτό καθορίζει τον τρόπο με τον οποίο εφαρμόζεται η κατάταξη στο σύνολο αποτελεσμάτων.
  3. Το PARTITION BY partition_expression είναι μια προαιρετική ρήτρα που μας επιτρέπει να χωρίσουμε το σύνολο που προκύπτει σε ομάδες ή κατατμήσεις που βασίζονται σε μία ή περισσότερες στήλες. Η κατάταξη εφαρμόζεται ξεχωριστά σε κάθε διαμέρισμα με την επαναφορά της κατάταξης σε ένα νέο διαμέρισμα.
  4. Η έκφραση ORDER BY sort_expression καθορίζει τη σειρά με την οποία θέλουμε να χρησιμοποιήσουμε για την ταξινόμηση των δεδομένων στις κατατμήσεις που προκύπτουν.

Δειγμα δεδομένων

Για να δείξουμε πώς να χρησιμοποιήσετε τη συνάρτηση dense_rank(), ας ξεκινήσουμε με έναν πίνακα με ένα δείγμα δεδομένων. Στην περίπτωσή μας, χρησιμοποιούμε ένα δείγμα πίνακα «παραγγελιών» ως εξής:

Παράδειγμα 1: Χρήση συνάρτησης Dense_Rank().

Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση dense_rank() για να ταξινομήσουμε τις παραγγελίες που προκύπτουν με βάση την τιμή. Εξετάστε το ακόλουθο παράδειγμα ερωτήματος:

ΕΠΙΛΕΓΩ

Αριθμός Παραγγελίας,

πελάτη_όνομα χρήστη,

προϊόν_αγορασμένο,

DENSE_RANK() OVER (

ΣΕΙΡΑ ΜΕ

τιμή ΔΙΣΚΟΣ

) τιμή_κατάταξη

ΑΠΟ

παραγγελίες o?

Στο συγκεκριμένο παράδειγμα, χρησιμοποιούμε τη συνάρτηση dense_rank() για να ταξινομήσουμε τα δεδομένα με βάση την τιμή των παραγγελιών. Παραλείπουμε την ρήτρα PARTITION BY καθώς δεν ομαδοποιούμε τα δεδομένα.

Η προκύπτουσα έξοδος είναι η εξής:

Παράδειγμα 2: ΧΩΡΙΣΜΟΣ ΑΠΟ

Μπορούμε επίσης να προσθέσουμε την ρήτρα PARTITION BY για να ομαδοποιήσουμε τα δεδομένα σε διάφορα τμήματα, όπως με βάση το προϊόν που αγοράσατε.

Ένα παράδειγμα ερωτήματος είναι το εξής:

ΕΠΙΛΕΓΩ

Αριθμός Παραγγελίας,

πελάτη_όνομα χρήστη,

προϊόν_αγορασμένο,

DENSE_RANK() OVER (

κατάτμηση ανά προϊόν_αγορασμένο

ΣΕΙΡΑ ΜΕ

τιμή ΔΙΣΚΟΣ

) τιμή_κατάταξη

ΑΠΟ

παραγγελίες o?

Αυτό θα πρέπει να ομαδοποιήσει τα δεδομένα σε διάφορες ομάδες με βάση τις ομάδες που προκύπτουν και να εφαρμόσει την κατάταξη για τα στοιχεία σε κάθε ομάδα.

συμπέρασμα

Σε αυτήν την ανάρτηση, μάθαμε τις βασικές αρχές της χρήσης και της εργασίας με τη συνάρτηση παραθύρου dense_rank() στην SQL για την ανάθεση μιας κατάταξης στις τιμές με βάση συγκεκριμένες στήλες.