Λειτουργία παραθύρου MySQL Row Number

Mysql Row Number Window Function



Μέσα στο MySQL, μια μέθοδος ROW NUMBER () περιέχει χρονολογικό αριθμό για κάθε σειρά μέσα στο διαμέρισμα. Είναι απλώς ένα είδος παραθύρου κάποιου είδους. Το σχήμα των σειρών ξεκινά στο 1 με το σχήμα των γραμμών μέσα στο διαμέρισμα. Θυμηθείτε, πριν από την έκδοση 8.0, η MySQL δεν επιτρέπει τη λειτουργία ROW NUMBER (), ωστόσο, προσφέρει μια μεταβλητή περιόδου σύνδεσης που βοηθάει κάποιον να μιμηθεί αυτήν τη λειτουργία. Θα κατανοήσουμε περισσότερα σχετικά με τη λειτουργία MySQL ROW NUMBER () σε αυτόν τον οδηγό και θα παράγουμε έναν συνεχόμενο αριθμό για κάθε σειρά στη συλλογή αποτελεσμάτων. Στο MySQL, οι μέθοδοι ROW_NUMBER () χρησιμοποιούνται είτε με τις επόμενες ρήτρες:

  • Η ρήτρα Over () θα χρησιμοποιηθεί σε αυτήν.
  • ΠΑΡΑΓΓΕΛΙΕΣ ΑΠΟ ρήτρα τακτοποιήστε το αποτέλεσμα σύμφωνα με τη σειρά ταξινόμησης της αναφερόμενης στήλης.

Σύνταξη:

>> ΕΠΙΛΕΓΩ col_name,ROW_NUMBER()ΠΑΝΩ ΑΠΟ( ΧΩΡΙΣΜΑ ΑΠΟ ΤΟ ΚΟΛ_ΟΝΟ, ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ col_name) ΟΠΩΣ ΚΑΙ row_num ΑΠΟ όνομα_τραπέδου?

Ας ανοίξουμε το κέλυφος προγράμματος-πελάτη γραμμής εντολών MySQL από τις εφαρμογές και πληκτρολογήστε τον κωδικό πρόσβασης για να συνδεθείτε.









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



>> ΕΠΙΛΕΓΩ * ΑΠΟ δεδομένα .των ζώων?





Παράδειγμα 01: ROW_NUMBER () Χρήση παραγγελίας μέσω ρήτρας

Θα χρησιμοποιήσουμε τον ίδιο πίνακα για να αναπτύξουμε ορισμένα παραδείγματα της συνάρτησης αριθμού γραμμών. Παίρνουμε ένα παράδειγμα της συνάρτησης ROW_NUMBER () ακολουθούμενο από Over (), ενώ χρησιμοποιούμε μόνο τη ρήτρα ORDER BY. Πραγματοποιήσαμε λήψη όλων των εγγραφών κατά την αρίθμηση των γραμμών σύμφωνα με τη στήλη Τιμή σειράς. Δώσαμε το όνομα row_num σε μια στήλη, η οποία θα αποθηκεύσει τους αριθμούς της σειράς. Ας δοκιμάσουμε την παρακάτω εντολή για να το κάνουμε.

>> ΕΠΙΛΕΓΩ *,ROW_NUMBER()ΠΑΝΩ ΑΠΟ( ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ Τιμή) ΟΠΩΣ ΚΑΙ row_num ΑΠΟ δεδομένα .των ζώων?

Κατά την εκτέλεση του παραπάνω ερωτήματος, μπορούμε να δούμε ότι οι γραμμές έχουν εκχωρηθεί με αριθμούς σύμφωνα με τη σειρά ταξινόμησης της στήλης Τιμή. Mightσως νομίζετε ότι κάποιες μικρότερες τιμές θα πρέπει να βρίσκονται στην κορυφή της στήλης και θα πρέπει να ταξινομούνται σύμφωνα με αυτό. Αλλά η ρήτρα ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ βλέπει μόνο το πρώτο ψηφίο ή αλφάβητο της στήλης για να ταξινομήσει τιμές.



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

>> ΕΠΙΛΕΓΩ *,ROW_NUMBER()ΠΑΝΩ ΑΠΟ( ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ Ηλικία) ΟΠΩΣ ΚΑΙ row_num ΑΠΟ δεδομένα .των ζώων?

Παράδειγμα 02: ROW_NUMBER () Χρήση PARTITION BY Clause

Θα χρησιμοποιήσουμε τη μόνη ρήτρα PARTITION BY στο ερώτημα ROW_NUMBER () για να ελέγξουμε τα αποτελέσματα. Χρησιμοποιήσαμε το ερώτημα SELECT για την ανάκτηση των εγγραφών που ακολουθούνται από τη ρήτρα ROW_NUMBER () και OVER, ενώ χωρίζουμε τον πίνακα σύμφωνα με τη στήλη Χρώμα. Εκτελέστε την προσαρτημένη παρακάτω εντολή στο κέλυφος εντολών.

>> ΕΠΙΛΕΓΩ *,ROW_NUMBER()ΠΑΝΩ ΑΠΟ( ΧΩΡΙΣΜΑ ΜΕ ΧΡΩΜΑ) ΟΠΩΣ ΚΑΙ row_num ΑΠΟ δεδομένα .των ζώων?

Μπορείτε να δείτε στο αποτέλεσμα ότι η αρίθμηση των γραμμών έχει εκχωρηθεί σε διαμερίσματα, σύμφωνα με τη σειρά ταξινόμησης χρωμάτων. Καθώς έχουμε 4 τιμές για το χρώμα Μαύρο που παίρνει 4 σειρές. Αυτός είναι ο λόγος για τον οποίο έχει αριθμούς τεσσάρων σειρών που ξεκινούν από 1 έως 4 και αντίστροφα.

Δοκιμάστε το ίδιο παράδειγμα, χωρισμένο από τη στήλη Φύλο αυτή τη φορά. Όπως γνωρίζουμε, έχουμε μόνο δύο φύλα σε αυτόν τον πίνακα, γι 'αυτό και θα δημιουργηθούν 2 διαμερίσματα. Τα θηλυκά καταλαμβάνουν 9 σειρές, γι 'αυτό έχει αρίθμηση σειρών από 1 έως 9. Ενώ τα αρσενικά έχουν 8 τιμές, γι' αυτό έχει 1 έως 8.

>> ΕΠΙΛΕΓΩ *,ROW_NUMBER()ΠΑΝΩ ΑΠΟ( ΧΩΡΙΣΜΑ ΚΑΤΑ ΤΟ ΦΥΛΟ) ΟΠΩΣ ΚΑΙ row_num ΑΠΟ δεδομένα .των ζώων?

Παράδειγμα 03: ROW_NUMBER () Χρήση PARTITION BY & ORDER BY

Έχουμε κάνει τα δύο παραπάνω παραδείγματα στη γραμμή εντολών MySQL, τώρα ήρθε η ώρα να κάνουμε το παράδειγμα ROW_NUMBER () στον MySQL Workbench 8.0. Έτσι, ανοίξτε το MySQL Workbench 8.0 από τις εφαρμογές. Συνδέστε το MySQL Workbench με την τοπική βάση δεδομένων root για να ξεκινήσετε να εργάζεστε.

Στην αριστερή πλευρά του MySQL Workbench, θα βρείτε τη γραμμή Schema, φυσώντας τον πλοηγό. Σε αυτήν τη γραμμή σχήματος, θα βρείτε τη λίστα βάσεων δεδομένων. Κάτω από τη λίστα βάσεων δεδομένων, θα έχετε διαφορετικούς πίνακες και αποθηκευμένες διαδικασίες, όπως μπορείτε να δείτε στην παρακάτω εικόνα. Έχουμε διαφορετικούς πίνακες στα «δεδομένα» της βάσης δεδομένων μας. Θα ανοίξουμε τον πίνακα ‘order1’ χρησιμοποιώντας την εντολή SELECT στην περιοχή ερωτήματος για να ξεκινήσουμε να τον χρησιμοποιούμε για την εφαρμογή της συνάρτησης ROW_NUMBER ().

>> ΕΠΙΛΕΓΩ * ΑΠΟ δεδομένα .παραγγελία1?

Η σειρά πίνακα1 εμφανίστηκε στην προβολή πλέγματος όπως φαίνεται παρακάτω. Μπορείτε να δείτε ότι έχει 4 πεδία στήλης, αναγνωριστικό, Περιοχή, Κατάσταση και OrderNo. Θα φέρουμε όλες τις εγγραφές αυτού του πίνακα ενώ χρησιμοποιούμε τη ρήτρα ORDER BY και PARTITION BY, και τα δύο ταυτόχρονα.

Στην περιοχή ερωτήματος του MySQL Workbench 8.0, πληκτρολογήστε το ερώτημα που εμφανίζεται παρακάτω. Το ερώτημα έχει ξεκινήσει με τη ρήτρα SELECT, φέρνοντας όλες τις εγγραφές που ακολουθούνται από τη συνάρτηση ROW_NUMBER () μαζί με τη ρήτρα OVER. Μετά τη ρήτρα OVER, καθορίσαμε τη στήλη Κατάσταση που προχωρά η δήλωση PARTITION BY για να χωρίσουμε τον πίνακα σε κατατμήσεις σύμφωνα με αυτόν τον πίνακα. Η ρήτρα ΠΑΡΑΓΓΕΛΙΑΣ χρησιμοποιείται για να τακτοποιήσει τον πίνακα κατά φθίνουσα σειρά σύμφωνα με τη στήλη Περιοχή. Οι αριθμοί γραμμών θα διατηρηθούν στη στήλη row_num. Πατήστε στο εικονίδιο φλας για να εκτελέσετε αυτήν την εντολή.

Θα εμφανιστεί το αποτέλεσμα που εμφανίζεται παρακάτω. Πρώτα απ 'όλα, ο πίνακας έχει χωριστεί σε δύο μέρη σύμφωνα με τις τιμές της στήλης Κατάσταση. Μετά από αυτό, παρουσιάστηκε με φθίνουσα σειρά στη στήλη «Περιοχή» και τα διαμερίσματα έχουν εκχωρηθεί με τους αριθμούς γραμμών.

Συμπέρασμα:

Τέλος, έχουμε ολοκληρώσει όλα τα απαραίτητα παραδείγματα κατά τη χρήση της συνάρτησης ROW_NUMBER () στο MySQL Workbench και στο MySQL Command-line Client Shell.