Τι είναι να έχει sum sql. SELECT εντολή HAVING ενότητα. Γράψτε μόνοι σας ερωτήματα με τη δήλωση SQL HAVING και, στη συνέχεια, δείτε τις λύσεις

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

Αναμφίβολα, η δυνατότητα ομαδοποίησης δεδομένων κατά τη δειγματοληψία τους σύμφωνα με ένα συγκεκριμένο κριτήριο είναι ένα από αυτά τα εργαλεία. Το HAVING, μαζί με τον τελεστή WHERE, σας επιτρέπει να προσδιορίσετε τις προϋποθέσεις για την επιλογή δεδομένων που έχουν ήδη ομαδοποιηθεί με κάποιο τρόπο.

HAVING SQL παράμετρος: περιγραφή

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

Αυτό είναι ένα εξαιρετικό παράδειγμα που δίνει μια περιγραφή του HAVING SQL. Δίνεται ένας πίνακας με μια λίστα με ονόματα προϊόντων, εταιρείες που τα παράγουν και ορισμένα άλλα πεδία. Στο ερώτημα στην επάνω δεξιά γωνία, προσπαθούμε να λάβουμε πληροφορίες για το πόσα προϊόντα παράγει κάθε εταιρεία και ως αποτέλεσμα θέλουμε να εμφανίσουμε μόνο εκείνες τις εταιρείες που παράγουν περισσότερα από 2 προϊόντα. Η παράμετρος GROUP BY σχημάτισε τρεις ομάδες που αντιστοιχούν σε επωνυμίες εταιρειών, για καθεμία από τις οποίες υπολογίστηκε ο αριθμός των προϊόντων (σειρών). Αλλά η παράμετρος HAVING, με την κατάστασή της, απέκοψε μια ομάδα από το δείγμα που προέκυψε, αφού δεν ικανοποιούσε την προϋπόθεση. Ως αποτέλεσμα, παίρνουμε δύο ομάδες που αντιστοιχούν σε εταιρείες με 5 και 3 ποσότητες παραγωγής.

Θα μπορούσε κανείς να αναρωτηθεί γιατί να χρησιμοποιήσετε το HAVING όταν η SQL έχει WHERE. Αν χρησιμοποιούσαμε WHERE, θα εξέταζε τον συνολικό αριθμό σειρών στον πίνακα, όχι ανά ομάδες και η συνθήκη δεν θα είχε νόημα σε αυτήν την περίπτωση. Ωστόσο, αρκετά συχνά συνυπάρχουν τέλεια σε ένα αίτημα.

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

Παράμετρος SQL HAVING: παραδείγματα, σύνταξη

Ας δούμε μερικά χαρακτηριστικά της σύνταξης HAVING SQL. Η περιγραφή αυτής της παραμέτρου είναι αρκετά απλή. Πρώτον, όπως ήδη σημειώθηκε, χρησιμοποιείται αποκλειστικά σε συνδυασμό με την παράμετρο GROUP BY και καθορίζεται αμέσως μετά και πριν από την ORDER BY, εάν υπάρχει στο αίτημα. Αυτό είναι κατανοητό, αφού το HAVING ορίζει συνθήκες για ήδη ομαδοποιημένα δεδομένα. Δεύτερον, μόνο οι συγκεντρωτικές συναρτήσεις και τα πεδία που καθορίζονται στην παράμετρο GROUP BY μπορούν να χρησιμοποιηθούν στην συνθήκη αυτής της παραμέτρου. Όλες οι συνθήκες σε αυτή η παράμετροςπροσδιορίζονται με τον ίδιο ακριβώς τρόπο όπως στην περίπτωση του WHERE.

συμπέρασμα

Όπως μπορείτε να δείτε, δεν υπάρχει τίποτα περίπλοκο δεδομένου χειριστήΟχι. Σημασιολογικά χρησιμοποιείται με τον ίδιο τρόπο όπως το WHERE. Είναι σημαντικό να κατανοήσουμε ότι το WHERE χρησιμοποιείται σε σχέση με όλα τα επιλεγμένα δεδομένα και το HAVING χρησιμοποιείται μόνο σε σχέση με τις ομάδες που ορίζονται στην παράμετρο GROUP BY. Παρουσιάσαμε μια περιεκτική περιγραφή του HAVING SQL, η οποία είναι αρκετή για να εργαστείτε με σιγουριά μαζί του.

Πώς μπορώ να μάθω τον αριθμό των μοντέλων Η/Υ που παράγονται από έναν συγκεκριμένο προμηθευτή; Πώς να καθορίσετε τη μέση τιμή των υπολογιστών που έχουν το ίδιο Προδιαγραφές? Αυτές και πολλές άλλες ερωτήσεις που σχετίζονται με ορισμένες στατιστικές πληροφορίες μπορούν να απαντηθούν χρησιμοποιώντας τελικές (συγκεντρωτικές) συναρτήσεις. Το πρότυπο παρέχει τις ακόλουθες συγκεντρωτικές λειτουργίες:

Όλες αυτές οι συναρτήσεις επιστρέφουν μία μόνο τιμή. Ταυτόχρονα, οι λειτουργίες COUNT, MINΚαι ΜΕΓΙΣΤΗισχύει για κάθε τύπο δεδομένων, ενώ ΑΘΡΟΙΣΜΑΚαι AVGχρησιμοποιούνται μόνο για αριθμητικά πεδία. Διαφορά μεταξύ λειτουργίας ΜΕΤΡΩ(*)Και ΜΕΤΡΩ(<имя поля>) είναι ότι η δεύτερη δεν λαμβάνει υπόψη τις τιμές NULL κατά τον υπολογισμό.

Παράδειγμα. Βρείτε την ελάχιστη και τη μέγιστη τιμή για προσωπικούς υπολογιστές:

Παράδειγμα. Βρείτε τον διαθέσιμο αριθμό υπολογιστών που παράγονται από τον κατασκευαστή Α:

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

Παράδειγμα. Βρείτε τον αριθμό των διαθέσιμων διαφορετικών μοντέλων που παράγονται από τον κατασκευαστή A. Το ερώτημα είναι παρόμοιο με το προηγούμενο, στο οποίο έπρεπε να προσδιοριστεί ο συνολικός αριθμός μοντέλων που παράγονται από τον κατασκευαστή A. Εδώ πρέπει επίσης να βρείτε τον αριθμό των διαφορετικών μοντέλων στο το τραπέζι υπολογιστή (δηλαδή, αυτά που είναι διαθέσιμα προς πώληση).

Για να διασφαλιστεί ότι χρησιμοποιούνται μόνο μοναδικές τιμές κατά τη λήψη στατιστικών δεικτών, όταν διαφωνία αθροιστικές συναρτήσεις μπορεί να χρησιμοποιηθεί DISTINCT παράμετρος. Αλλο παράμετρος ALLείναι η προεπιλογή και προϋποθέτει ότι μετρώνται όλες οι επιστρεφόμενες τιμές στη στήλη. Χειριστής,

Εάν πρέπει να λάβουμε τον αριθμό των μοντέλων Η/Υ που παράγονται Ολοικατασκευαστή, θα χρειαστεί να χρησιμοποιήσετε ΟΜΑΔΑ ΑΝΑ ρήτρα, ακολουθώντας συντακτικά WHERE ρήτρες.

ΟΜΑΔΑ ΑΝΑ ρήτρα

ΟΜΑΔΑ ΑΝΑ ρήτραχρησιμοποιείται για τον καθορισμό ομάδων γραμμών εξόδου στις οποίες μπορούν να εφαρμοστούν συγκεντρωτικές συναρτήσεις (COUNT, MIN, MAX, AVG και SUM). Εάν λείπει αυτή η ρήτρα και χρησιμοποιούνται συγκεντρωτικές συναρτήσεις, τότε όλες οι στήλες με ονόματα που αναφέρονται ΕΠΙΛΕΓΩ, πρέπει να περιλαμβάνεται σε αθροιστικές συναρτήσεις, και αυτές οι συναρτήσεις θα εφαρμοστούν σε ολόκληρο το σύνολο σειρών που ικανοποιούν το κατηγόρημα του ερωτήματος. Διαφορετικά, όλες οι στήλες της λίστας SELECT Δεν περιλαμβάνονταιπρέπει να καθοριστούν συνολικά οι συναρτήσεις στην ρήτρα GROUP BY. Ως αποτέλεσμα, όλες οι σειρές ερωτημάτων εξόδου χωρίζονται σε ομάδες που χαρακτηρίζονται από τους ίδιους συνδυασμούς τιμών σε αυτές τις στήλες. Μετά από αυτό, θα εφαρμοστούν συγκεντρωτικές συναρτήσεις σε κάθε ομάδα. Λάβετε υπόψη ότι για το GROUP BY όλες οι NULL τιμές αντιμετωπίζονται ως ίσες, δηλ. κατά την ομαδοποίηση με ένα πεδίο που περιέχει τιμές NULL, όλες αυτές οι σειρές θα εμπίπτουν σε μία ομάδα.
Αν εάν υπάρχει ρήτρα GROUP BY, στον όρο SELECT χωρίς συγκεντρωτικές συναρτήσεις, τότε το ερώτημα θα επιστρέψει απλώς μια σειρά από κάθε ομάδα. Αυτή η δυνατότητα, μαζί με τη λέξη-κλειδί DISTINCT, μπορεί να χρησιμοποιηθεί για την εξάλειψη των διπλότυπων σειρών σε ένα σύνολο αποτελεσμάτων.
Ας δούμε ένα απλό παράδειγμα:
SELECT μοντέλο, COUNT(model) AS Qty_model, AVG(price) AS Avg_price
ΑΠΟ Η/Υ
GROUP BY μοντέλο?

Σε αυτό το αίτημα, για κάθε μοντέλο Η/Υ καθορίζεται ο αριθμός και το μέσο κόστος τους. Όλες οι σειρές με την ίδια τιμή μοντέλου σχηματίζουν μια ομάδα και η έξοδος του SELECT υπολογίζει τον αριθμό των τιμών και τις μέσες τιμές τιμής για κάθε ομάδα. Το αποτέλεσμα του ερωτήματος θα είναι ο παρακάτω πίνακας:
μοντέλο Qty_model Μέση_τιμή
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Εάν το SELECT είχε στήλη ημερομηνίας, τότε θα ήταν δυνατός ο υπολογισμός αυτών των δεικτών για κάθε συγκεκριμένη ημερομηνία. Για να το κάνετε αυτό, πρέπει να προσθέσετε την ημερομηνία ως στήλη ομαδοποίησης και, στη συνέχεια, θα υπολογιστούν οι συγκεντρωτικές συναρτήσεις για κάθε συνδυασμό τιμών (μοντέλο-ημερομηνία).

Υπάρχουν αρκετά συγκεκριμένα κανόνες για την εκτέλεση συγκεντρωτικών λειτουργιών:

  • Εάν ως αποτέλεσμα του αιτήματος δεν ελήφθησαν σειρές(ή περισσότερες από μία σειρές για μια δεδομένη ομάδα), τότε δεν υπάρχουν δεδομένα πηγής για τον υπολογισμό οποιασδήποτε από τις συγκεντρωτικές συναρτήσεις. Σε αυτήν την περίπτωση, το αποτέλεσμα των COUNT συναρτήσεων θα είναι μηδέν και το αποτέλεσμα όλων των άλλων συναρτήσεων θα είναι NULL.
  • Διαφωνίααθροιστική συνάρτηση δεν μπορεί να περιέχει συγκεντρωτικές συναρτήσεις(συνάρτηση από συνάρτηση). Εκείνοι. σε ένα ερώτημα είναι αδύνατο, ας πούμε, να ληφθεί το μέγιστο των μέσων τιμών.
  • Το αποτέλεσμα της εκτέλεσης της συνάρτησης COUNT είναι ακέραιος αριθμός(ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ). Άλλες συγκεντρωτικές συναρτήσεις κληρονομούν τους τύπους δεδομένων των τιμών που επεξεργάζονται.
  • Εάν η συνάρτηση SUM παράγει ένα αποτέλεσμα που είναι μεγαλύτερο από τη μέγιστη τιμή του χρησιμοποιούμενου τύπου δεδομένων, λάθος.

Έτσι, εάν το αίτημα δεν περιέχει ΟΜΑΔΑ ΑΠΟ ρήτρες, Οτι αθροιστικές συναρτήσειςσυμπεριλαμβανεται σε ρήτρα SELECT, εκτελούνται σε όλες τις σειρές ερωτημάτων που προκύπτουν. Εάν το αίτημα περιέχει ΟΜΑΔΑ ΑΝΑ ρήτρα, κάθε σύνολο γραμμών που έχει τις ίδιες τιμές μιας στήλης ή μιας ομάδας στηλών που καθορίζονται σε ΟΜΑΔΑ ΑΝΑ ρήτρα, συγκροτεί μια ομάδα και αθροιστικές συναρτήσειςεκτελούνται για κάθε ομάδα ξεχωριστά.

ΕΧΕΙ προσφορά

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

Η ρήτρα HAVING χρησιμοποιείται σε συνδυασμό με την ρήτρα GROUP BY. Μπορεί να χρησιμοποιηθεί σε μια πρόταση SELECT για να φιλτράρει τις εγγραφές που επιστρέφονται από τον όρο GROUP BY.

HAVING ρήτρα σύνταξη

aggregate_functionμπορεί να είναι μια συνάρτηση όπως SUM, COUNT, MIN ή MAX.

Παράδειγμα χρήσης της συνάρτησης SUM
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση SUM για να αναζητήσετε το όνομα του τμήματος και το ποσό πωλήσεων (για τα σχετικά τμήματα). Η προσφορά HAVING μπορεί να επιλέξει μόνο εκείνα τα τμήματα των οποίων οι πωλήσεις είναι περισσότερες από 1000 $.

ΕΠΙΛΕΞΤΕ τμήμα, ΠΟΣΟ(πωλήσεις) ΩΣ "Συνολικές πωλήσεις" ΑΠΟ order_details ΟΜΑΔΑ ΑΝΑ τμήμα ΕΧΕΙ ΠΟΣΟ(πωλήσεις) > 1000 ;

Παράδειγμα χρήσης της συνάρτησης COUNT
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση COUNT για να ανακτήσετε το όνομα του τμήματος και τον αριθμό των υπαλλήλων (στο σχετικό τμήμα) που κέρδισαν περισσότερα από 25.000 $ ετησίως. Η πρόταση HAVING θα επιλέξει μόνο εκείνα τα τμήματα όπου υπάρχουν περισσότεροι από 10 τέτοιοι υπάλληλοι.

Παράδειγμα χρήσης της συνάρτησης MIN
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση MIN για να επιστρέψετε το όνομα του τμήματος και τα ελάχιστα έσοδα για αυτό το τμήμα. Η πρόταση HAVING θα επιστρέψει μόνο εκείνα τα τμήματα των οποίων τα έσοδα ξεκινούν από 35.000 $.

ΕΠΙΛΟΓΗ τμήματος, MIN(μισθός) ΩΣ "Χαμηλότερος μισθός" ΑΠΟ εργαζομένους ΟΜΑΔΑ ΑΝΑ τμήμα ΕΧΟΥΝ ΕΛΑΧΙΣΤΟ (μισθός) = 35000 ;

Παράδειγμα χρήσης της συνάρτησης MAX
Για παράδειγμα, μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση για να ανακτήσετε το όνομα του τμήματος και τα μέγιστα έσοδα του τμήματος. Η πρόταση HAVING θα επιστρέψει μόνο εκείνα τα τμήματα των οποίων τα μέγιστα έσοδα είναι μικρότερα από 50.000 $.

ΕΠΙΛΟΓΗ τμήματος, ΜΕΓΙΣΤΟΣ(μισθός) ΩΣ "Υψηλότερος μισθός" ΑΠΟ εργαζομένους ΟΜΑΔΑ ΑΝΑ τμήμα ΕΧΟΥΝ ΜΕΓΙΣΤΟ(μισθό)< 50000 ;

Τελευταία ενημέρωση: 19/07/2017

Η T-SQL χρησιμοποιεί τις προτάσεις GROUP BY και HAVING για να ομαδοποιήσει δεδομένα, χρησιμοποιώντας την ακόλουθη επίσημη σύνταξη:

ΕΠΙΛΟΓΗ στηλών ΑΠΟ τον πίνακα

ΟΜΑΔΑ ΑΠΟ

Ο όρος GROUP BY καθορίζει πώς θα ομαδοποιηθούν οι σειρές.

Για παράδειγμα, ας ομαδοποιήσουμε τα προϊόντα ανά κατασκευαστή

SELECT Κατασκευαστής, COUNT(*) AS ModelsCount FROM Products GROUP BY Manufacturer

Η πρώτη στήλη στη δήλωση SELECT - Manufacturer αντιπροσωπεύει το όνομα της ομάδας και η δεύτερη στήλη - ModelsCount αντιπροσωπεύει το αποτέλεσμα της συνάρτησης Count, η οποία υπολογίζει τον αριθμό των σειρών στην ομάδα.

Αξίζει να ληφθεί υπόψη ότι κάθε στήλη που χρησιμοποιείται σε μια πρόταση SELECT (χωρίς να υπολογίζονται οι στήλες που αποθηκεύουν το αποτέλεσμα συγκεντρωτικών συναρτήσεων) πρέπει να προσδιορίζεται μετά τον όρο GROUP BY. Έτσι, για παράδειγμα, στην παραπάνω περίπτωση, η στήλη Κατασκευαστής καθορίζεται και στις δύο ρήτρες SELECT και GROUP BY.

Και αν η πρόταση SELECT επιλέξει μία ή περισσότερες στήλες και χρησιμοποιεί επίσης συναρτήσεις συγκεντρωτικών στοιχείων, τότε πρέπει να χρησιμοποιήσετε την ρήτρα GROUP BY. Έτσι, το ακόλουθο παράδειγμα δεν θα λειτουργήσει επειδή δεν περιέχει έκφραση ομαδοποίησης:

SELECT Κατασκευαστής, COUNT(*) AS ModelsCount FROM Products

Ένα άλλο παράδειγμα, ας προσθέσουμε μια ομαδοποίηση με βάση τον αριθμό των προϊόντων:

SELECT Manufacturer, ProductCount, COUNT(*) AS ModelsCount FROM Products GROUP BY BY Manufacturer, ProductCount

Ο όρος GROUP BY μπορεί να ομαδοποιηθεί σε πολλές στήλες.

Εάν η στήλη στην οποία ομαδοποιείτε περιέχει μια τιμή NULL, οι σειρές με την τιμή NULL θα σχηματίσουν μια ξεχωριστή ομάδα.

Σημειώστε ότι η ρήτρα GROUP BY πρέπει να έρχεται μετά την ρήτρα WHERE αλλά πριν από την ρήτρα ORDER BY:

SELECT Κατασκευαστής, COUNT(*) AS ModelsCount FROM Products WHERE Τιμή > 30000 ΟΜΑΔΑ ΑΝΑ Κατασκευαστή ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ Μοντέλα Καταμέτρηση DESC

Φιλτράρισμα ομάδας. ΕΧΟΝΤΑΣ

Χειριστής ΕΧΟΝΤΑΣ καθορίζει ποιες ομάδες θα συμπεριληφθούν στο αποτέλεσμα εξόδου, δηλαδή φιλτράρει ομάδες.

Η χρήση του HAVING είναι από πολλές απόψεις παρόμοια με τη χρήση του WHERE. Μόνο WHERE χρησιμοποιείται για φιλτράρισμα σειρών, HAVING χρησιμοποιείται για φιλτράρισμα ομάδων.

Για παράδειγμα, ας βρούμε όλες τις ομάδες προϊόντων ανά κατασκευαστή για τις οποίες έχουν οριστεί περισσότερα από 1 μοντέλα:

SELECT Κατασκευαστής, COUNT(*) AS ModelsCount FROM Products GROUP BY BY Manufacturer HAVING COUNT(*) > 1

Σε αυτήν την περίπτωση, σε μία εντολή μπορούμε να χρησιμοποιήσουμε εκφράσεις WHERE και HAVING:

SELECT Κατασκευαστής, COUNT(*) AS ModelsCount FROM Products WHERE Τιμή * ProductCount > 80000 GROUP BY BY Manufacturer HAVING COUNT(*) > 1

Δηλαδή, σε αυτήν την περίπτωση, πρώτα φιλτράρονται οι σειρές: επιλέγονται εκείνα τα προϊόντα των οποίων το συνολικό κόστος είναι μεγαλύτερο από 80.000. Στη συνέχεια, τα επιλεγμένα προϊόντα ομαδοποιούνται ανά κατασκευαστή. Και στη συνέχεια φιλτράρονται οι ίδιες οι ομάδες - επιλέγονται εκείνες οι ομάδες που περιέχουν περισσότερα από 1 μοντέλα.

Εάν είναι απαραίτητο να γίνει ταξινόμηση, τότε η έκφραση ORDER BY έρχεται μετά την έκφραση HAVING:

SELECT Manufacturer, COUNT(*) AS Models, SUM(ProductCount) AS Units FROM Products WHERE Τιμή * ProductCount > 80000 GROUP BY BY Manufacturer HAVING SUM(ProductCount) > 2 ORDER BY BY Units DESC

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

Στο προηγούμενο άρθρο εξετάσαμε. Εκεί έγραψα ότι αυτή η κατασκευή σας επιτρέπει να επιλέξετε ξεχωριστές ομάδες και για κάθε ομάδα να υπολογίσετε τις συναρτήσεις που καθορίστηκαν μετά ΕΠΙΛΕΓΩ. ΕΝΑ ΕΧΟΝΤΑΣεπιτρέπει, σύμφωνα με τα αποτελέσματα της εκτέλεσης συναρτήσεων, να φιλτράρει τις περιττές σειρές από ομάδες. Ας το δούμε αυτό με περισσότερες λεπτομέρειες.

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

Για αυτό το φιλτράρισμα με βάση τα αποτελέσματα της εκτέλεσης της συνάρτησης συγκεντρωτικών, χρησιμοποιούμε στην εντολή SQL HAVING:

ΕΠΙΛΟΓΗ `shop_id`, AVG(`price`) FROM `table` GROUP BY `shop_id` HAVING AVG(`price`)< 38

Ως αποτέλεσμα, αντί για 4θα έχουμε μόνο γραμμές 3 :

shop_id AVG ("τιμή")
1 37.5
2 36.0
3 37.0

Αν σχέδια ΟΜΑΔΑ ΑΠΟδεν θα είναι τότε ΕΧΟΝΤΑΣδεν θα ισχύει για μια συγκεκριμένη ομάδα, αλλά για ολόκληρο το δείγμα. Αυτό σημαίνει ότι εάν η συνθήκη ΕΧΟΝΤΑΣθα εκτελεστεί, δεν θα έχει κανένα αποτέλεσμα. Και αν δεν εκτελεστεί, τότε δεν θα υπάρχει ούτε μία σειρά που θα προκύψει.