SQL GROUP BY και ΕΧΕΙ Ρήτρα με παραδείγματα

Πίνακας περιεχομένων:

Anonim

Τι είναι το SQL Group by Clause;

Ο όρος GROUP BY είναι μια εντολή SQL που χρησιμοποιείται για την ομαδοποίηση σειρών που έχουν τις ίδιες τιμές . Ο όρος GROUP BY χρησιμοποιείται στη δήλωση SELECT. Προαιρετικά χρησιμοποιείται σε συνδυασμό με συγκεντρωτικές συναρτήσεις για την παραγωγή συνοπτικών αναφορών από τη βάση δεδομένων.

Αυτό κάνει, συνοψίζοντας δεδομένα από τη βάση δεδομένων.

Τα ερωτήματα που περιέχουν τον όρο GROUP BY ονομάζονται ομαδοποιημένα ερωτήματα και επιστρέφουν μόνο μία σειρά για κάθε ομαδοποιημένο στοιχείο.

SQL GROUP BY Σύνταξη

Τώρα που γνωρίζουμε τι είναι η ρήτρα SQL GROUP BY, ας δούμε τη σύνταξη για μια βασική ομάδα με ερώτημα.

SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];

ΕΔΩ

  • Το "SELECT statement ..." είναι το τυπικό ερώτημα εντολών SQL SELECT.
  • " GROUP BY column_name1" είναι η ρήτρα που εκτελεί την ομαδοποίηση βάσει της στήλης_name1.
  • Το [[, column_name2,…] "είναι προαιρετικό. αντιπροσωπεύει άλλα ονόματα στηλών όταν η ομαδοποίηση γίνεται σε περισσότερες από μία στήλες.
  • Το "[HAVING condition]" είναι προαιρετικό. Χρησιμοποιείται για τον περιορισμό των σειρών που επηρεάζονται από τον όρο GROUP BY. Είναι παρόμοιο με τη ρήτρα WHERE.

Ομαδοποίηση χρησιμοποιώντας μία στήλη

Για να κατανοήσουμε την επίδραση του SQL Group By ρήτρα, ας εκτελέσουμε ένα απλό ερώτημα που επιστρέφει όλες τις καταχωρίσεις φύλου από τον πίνακα μελών.

SELECT `gender` FROM `members` ;
 
gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

Ας υποθέσουμε ότι θέλουμε να έχουμε τις μοναδικές τιμές για τα φύλα. Μπορούμε να χρησιμοποιήσουμε ένα ακόλουθο ερώτημα -

SELECT `gender` FROM `members` GROUP BY `gender`;

Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του Myflixdb μας δίνει τα ακόλουθα αποτελέσματα.

 
gender
Female
Male

Σημειώστε ότι έχουν επιστραφεί μόνο δύο αποτελέσματα. Αυτό συμβαίνει επειδή έχουμε μόνο δύο τύπους φύλου Άνδρας και Γυναίκα. Ο όρος GROUP BY στο SQL ομαδοποίησε όλα τα μέλη του "Male" και επέστρεψε μόνο μία σειρά για αυτό. Το ίδιο έκανε και με τα μέλη του "Female".

Ομαδοποίηση χρησιμοποιώντας πολλές στήλες

Ας υποθέσουμε ότι θέλουμε να λάβουμε μια λίστα με το kategori_id της ταινίας και τα αντίστοιχα έτη κατά τα οποία κυκλοφόρησαν.

Ας παρατηρήσουμε την έξοδο αυτού του απλού ερωτήματος

SELECT `category_id`,`year_released` FROM `movies` ;
 
category_id year_released
1 2011
2 2008
NULL 2008
NULL 2010
8 2007
6 2007
6 2007
8 2005
NULL 2012
7 1920
8 NULL
8 1920

Το παραπάνω αποτέλεσμα έχει πολλά αντίγραφα.

Ας εκτελέσουμε το ίδιο ερώτημα χρησιμοποιώντας την ομάδα στο SQL -

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα που εμφανίζονται παρακάτω.

 
category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

Ο όρος GROUP BY λειτουργεί τόσο στο αναγνωριστικό κατηγορίας όσο και στο έτος που κυκλοφόρησε για τον εντοπισμό μοναδικών σειρών στο παραπάνω παράδειγμα.

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

Ομαδοποίηση και συγκεντρωτικές συναρτήσεις

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

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα.

 
gender COUNT('membership_number')
Female 3
Male 5

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

Περιορισμός αποτελεσμάτων ερωτήματος χρησιμοποιώντας τη ρήτρα HAVING

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

Ας υποθέσουμε ότι θέλουμε να μάθουμε όλα τα έτη κυκλοφορίας για την κατηγορία 8. Ταινία θα χρησιμοποιούσαμε το παρακάτω σενάριο για να επιτύχουμε τα αποτελέσματά μας.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του Myflixdb μας δίνει τα ακόλουθα αποτελέσματα που εμφανίζονται παρακάτω.

 
movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Σημειώστε ότι μόνο οι ταινίες με το αναγνωριστικό κατηγορίας 8 έχουν επηρεαστεί από τον όρο GROUP BY.

Περίληψη

  • Το GROUP BY Clause SQL χρησιμοποιείται για την ομαδοποίηση σειρών με τις ίδιες τιμές.
  • Ο όρος GROUP BY χρησιμοποιείται μαζί με τη δήλωση SQL SELECT.
  • Η πρόταση SELECT που χρησιμοποιείται στον όρο GROUP BY μπορεί να χρησιμοποιηθεί μόνο περιέχει ονόματα στηλών, συγκεντρωτικές συναρτήσεις, σταθερές και εκφράσεις.
  • Το SQL Have Clause χρησιμοποιείται για τον περιορισμό των αποτελεσμάτων που επιστρέφονται από τον όρο GROUP BY.
  • Το MYSQL GROUP BY Clause χρησιμοποιείται για τη συλλογή δεδομένων από πολλές εγγραφές και επιστρεφόμενες εγγραφές που έχουν οριστεί από μία ή περισσότερες στήλες.