Συνάρτηση Sum σε SQL: SUM. Συγκεντρωτικές συναρτήσεις SQL - SUM, MIN, MAX, AVG, COUNT DISTINCT Παράδειγμα

06.04.2023

Ας μάθουμε να συνοψίζουμε. Όχι, αυτά δεν είναι τα αποτελέσματα της εκμάθησης της SQL, αλλά τα αποτελέσματα των τιμών των στηλών των πινάκων της βάσης δεδομένων. Οι αθροιστικές συναρτήσεις SQL λειτουργούν στις τιμές μιας στήλης για να παράγουν μια ενιαία τιμή αποτελέσματος. Οι πιο συχνά χρησιμοποιούμενες συναρτήσεις συγκεντρωτικών SQL είναι SUM, MIN, MAX, AVG και COUNT. Υπάρχουν δύο περιπτώσεις στις οποίες πρέπει να χρησιμοποιούνται συγκεντρωτικές συναρτήσεις. Πρώτον, οι συγκεντρωτικές συναρτήσεις χρησιμοποιούνται από μόνες τους και επιστρέφουν μια ενιαία τιμή αποτελέσματος. Δεύτερον, οι συγκεντρωτικές συναρτήσεις χρησιμοποιούνται με τον όρο SQL GROUP BY, δηλαδή με ομαδοποίηση κατά πεδία (στήλες) για να ληφθούν οι προκύπτουσες τιμές σε κάθε ομάδα. Εξετάστε πρώτα τις περιπτώσεις χρήσης αθροιστικών συναρτήσεων χωρίς ομαδοποίηση.

Λειτουργία SQL SUM

Η συνάρτηση SQL SUM επιστρέφει το άθροισμα των τιμών μιας στήλης σε έναν πίνακα βάσης δεδομένων. Μπορεί να εφαρμοστεί μόνο σε στήλες των οποίων οι τιμές είναι αριθμοί. Ερωτήματα SQLγια να πάρετε το άθροισμα που προκύπτει, ξεκινήστε ως εξής:

ΕΠΙΛΟΓΗ ΣΥΝΘΗΜΑΤΟΣ (COLUMNAME) ...

Αυτή η έκφραση ακολουθείται από FROM (TABLE_NAME) και στη συνέχεια μπορεί να καθοριστεί μια συνθήκη χρησιμοποιώντας τον όρο WHERE. Επιπλέον, το DISTINCT μπορεί να προστεθεί σε ένα όνομα στήλης για να υποδείξει ότι θα ληφθούν υπόψη μόνο μοναδικές τιμές. Από προεπιλογή, λαμβάνονται υπόψη όλες οι τιμές (για αυτό, μπορείτε να καθορίσετε συγκεκριμένα όχι DISTINCT, αλλά ALL, αλλά η λέξη ALL είναι προαιρετική).

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

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

Παράδειγμα 1Υπάρχει βάση δεδομένων της εταιρείας με στοιχεία για τα τμήματα και τους υπαλλήλους της. Ο πίνακας Προσωπικού έχει επίσης μια στήλη με στοιχεία μισθών υπαλλήλων. Η επιλογή από τον πίνακα έχει την ακόλουθη μορφή (για να μεγεθύνετε την εικόνα, κάντε κλικ πάνω της με το αριστερό κουμπί του ποντικιού):

Για να λάβουμε το άθροισμα όλων των μισθών, χρησιμοποιούμε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE company1;):

ΕΠΙΛΕΞΤΕ ΠΟΣΟ (Μισθός) ΑΠΟ Προσωπικό

Αυτό το ερώτημα θα επιστρέψει την τιμή 287664,63.

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

Λειτουργία SQL MIN

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

Παράδειγμα 3Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στο παράδειγμα 1.

Απαιτείται να μάθετε τον κατώτατο μισθό των υπαλλήλων του τμήματος 42. Για να γίνει αυτό, γράφουμε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE company1;):

Το ερώτημα θα επιστρέψει την τιμή 10505,90.

Και ξανα άσκηση για ανεξάρτητη απόφαση . Σε αυτήν και σε ορισμένες άλλες ασκήσεις, θα χρειαστείτε όχι μόνο τον πίνακα Staff, αλλά και τον πίνακα Org που περιέχει δεδομένα για τα τμήματα της εταιρείας:


Παράδειγμα 4Ο πίνακας Org προστίθεται στον πίνακα Staff, που περιέχει δεδομένα για τα τμήματα της εταιρείας. Εκτυπώστε τον ελάχιστο αριθμό ετών που ένας μεμονωμένος υπάλληλος έχει εργαστεί σε ένα τμήμα που βρίσκεται στη Βοστώνη.

Λειτουργία SQL MAX

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

Παράδειγμα 5

Απαιτείται να μάθετε τον μέγιστο μισθό των υπαλλήλων του τμήματος 42. Για να γίνει αυτό, γράφουμε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE company1;):

Το ερώτημα θα επιστρέψει την τιμή 18352,80

Είναι ώρα ασκήσεις αυτοδιάθεσης.

Παράδειγμα 6Και πάλι εργαζόμαστε με δύο πίνακες - Staff και Org. Εμφανίστε το όνομα του τμήματος και το μέγιστο ποσό προμηθειών που λαμβάνει ένας υπάλληλος στο τμήμα που ανήκει στην ομάδα τμημάτων (Division) Eastern. Χρήση JOIN (σύνδεση τραπεζιών) .

Λειτουργία SQL AVG

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

Παράδειγμα 7Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.

Ας χρειαστεί να μάθετε τη μέση προϋπηρεσία των υπαλλήλων του τμήματος 42. Για να γίνει αυτό, γράφουμε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE company1;):

Το αποτέλεσμα θα είναι 6,33

Παράδειγμα 8Δουλεύουμε με ένα τραπέζι - Προσωπικό. Εμφάνιση του μέσου μισθού των εργαζομένων με εμπειρία από 4 έως 6 χρόνια.

Λειτουργία SQL COUNT

Η συνάρτηση SQL COUNT επιστρέφει τον αριθμό των εγγραφών σε έναν πίνακα βάσης δεδομένων. Εάν καθορίσετε SELECT COUNT(COLUMNAME) ... στο ερώτημα, τότε το αποτέλεσμα θα είναι ο αριθμός των εγγραφών χωρίς να ληφθούν υπόψη εκείνες οι εγγραφές στις οποίες η τιμή της στήλης είναι NULL (μη καθορισμένη). Αν χρησιμοποιήσετε έναν αστερίσκο ως επιχείρημα και ξεκινήστε ΕΠΙΛΟΓΗ ερωτήματος COUNT(*) ..., τότε το αποτέλεσμα θα είναι ο αριθμός όλων των εγγραφών (σειρών) του πίνακα.

Παράδειγμα 9Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.

Θέλετε να μάθετε τον αριθμό όλων των υπαλλήλων που λαμβάνουν προμήθειες. Ο αριθμός των υπαλλήλων των οποίων οι τιμές στηλών Comm δεν είναι NULL θα επιστρέψει το ακόλουθο ερώτημα (στον MS SQL Server - με την εταιρεία USE1, σε εκκρεμότητα κατασκευή):

SELECT COUNT (Comm) FROM Staff

Το αποτέλεσμα θα είναι η τιμή 11.

Παράδειγμα 10Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.

Εάν πρέπει να μάθετε τον συνολικό αριθμό των εγγραφών στον πίνακα, τότε χρησιμοποιούμε το ερώτημα με έναν αστερίσκο ως όρισμα στη συνάρτηση COUNT (στον MS SQL Server - με το πρόθεμα USE company1;):

ΕΠΙΛΕΞΤΕ ΑΡΙΘΜΟ (*) ΑΠΟ Προσωπικό

Το αποτέλεσμα θα είναι η τιμή 17.

Επόμενο άσκηση για αυτοδιάθεσηπρέπει να χρησιμοποιήσετε ένα δευτερεύον ερώτημα.

Παράδειγμα 11.Δουλεύουμε με ένα τραπέζι - Προσωπικό. Εμφανίστε τον αριθμό των εργαζομένων στο τμήμα Plains.

Συγκεντρωτικές συναρτήσεις με SQL GROUP BY

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

Θα εργαστούμε με τη βάση δεδομένων «Πύλη Ανακοινώσεων 1». Το σενάριο για τη δημιουργία αυτής της βάσης δεδομένων, τον πίνακά της και τη συμπλήρωση του πίνακα δεδομένων βρίσκεται στο αρχείο σε αυτόν τον σύνδεσμο .

Παράδειγμα 12.Έτσι, υπάρχει μια βάση δεδομένων της πύλης διαφημίσεων. Διαθέτει έναν πίνακα διαφημίσεων που περιέχει δεδομένα σχετικά με τις διαφημίσεις που έχουν υποβληθεί για την εβδομάδα. Η στήλη Κατηγορία περιέχει δεδομένα σχετικά με μεγάλες κατηγορίες διαφημίσεων (για παράδειγμα, Real Estate) και η στήλη Ανταλλακτικά περιέχει δεδομένα σχετικά με μικρότερα τμήματα που περιλαμβάνονται στις κατηγορίες (για παράδειγμα, τα τμήματα Διαμερισμάτων και Βίλων είναι τμήματα της κατηγορίας Real Estate). Η στήλη "Μονάδες" περιέχει δεδομένα σχετικά με τον αριθμό των διαφημίσεων που υποβλήθηκαν και η στήλη "Χρήματα" περιέχει το ποσό των χρημάτων που κερδήθηκαν για την υποβολή διαφημίσεων.

ΚατηγορίαμέροςΜονάδεςΧρήματα
Μεταφοράμηχανοκίνητα οχήματα110 17600
ΑκίνηταΔιαμερίσματα89 18690
ΑκίνηταΝτάχας57 11970
ΜεταφοράΜοτοσικλέτες131 20960
οικοδομικά υλικάσανίδες68 7140
ηλεκτρολόγων μηχανικώντηλεοράσεις127 8255
ηλεκτρολόγων μηχανικώνΨυγεία137 8905
οικοδομικά υλικάRegips112 11760
Ελεύθερος χρόνοςΒιβλία96 6240
ΑκίνηταΣτο σπίτι47 9870
Ελεύθερος χρόνοςΜΟΥΣΙΚΗ117 7605
Ελεύθερος χρόνοςΠαιχνίδια41 2665

Χρησιμοποιώντας την ρήτρα SQL GROUP BY, βρείτε το χρηματικό ποσό που δημιουργείται με την υποβολή διαφημίσεων σε κάθε κατηγορία. Γράφουμε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE adportal1;):

ΕΠΙΛΕΞΤΕ Κατηγορία, ΠΟΣΟ (Χρήματα) ΩΣ ΧΡΗΜΑΤΑ ΑΠΟ ΔΙΑΦΗΜΙΣΕΙΣ ΟΜΑΔΑ ΑΝΑ Κατηγορία

Παράδειγμα 13Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στο προηγούμενο παράδειγμα.

Χρησιμοποιώντας τον όρο SQL GROUP BY, μάθετε ποιο τμήμα κάθε κατηγορίας είχε τις περισσότερες διαφημίσεις. Γράφουμε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE adportal1;):

ΕΠΙΛΕΞΤΕ Κατηγορία, Μέρος, ΜΕΓΙΣΤΟ (Μονάδες) AS Μέγιστο ΑΠΟ ΟΜΑΔΑ ΔΙΑΦΗΜΙΣΕΩΝ ΑΝΑ Κατηγορία

Το αποτέλεσμα θα είναι ο παρακάτω πίνακας:

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

Σχεσιακές βάσεις δεδομένων και γλώσσα SQL

Περιγράφει τη χρήση αριθμητικών τελεστών και την κατασκευή υπολογιζόμενων στηλών. Λαμβάνονται υπόψη οι συναρτήσεις σύνοψης (συγκεντρωτικές) COUNT, SUM, AVG, MAX, MIN. Δίνεται ένα παράδειγμα χρήσης του τελεστή GROUP BY για ομαδοποίηση σε ερωτήματα επιλογής δεδομένων. Περιγράφει τη χρήση της ρήτρας HAVING.

Δημιουργία υπολογισμένων πεδίων

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

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

SELECT Item.Name, Item.Price, Deal.Quantity, Item.Price*Trade.Quantity AS Cost FROM Item INNER JOIN Trade ON Item.ItemCode=Trade.ItemID Παράδειγμα 6.1. Υπολογισμός του συνολικού κόστους για κάθε συναλλαγή.

Παράδειγμα 6.2.Λάβετε μια λίστα εταιρειών με τα ονόματα και τα αρχικά των πελατών.

ΕΠΙΛΕΞΤΕ Εταιρεία, Επώνυμο+""+ Αριστερά(Όνομα,1)+"."+Αριστερά(Πατρώνυμο,1)+"."AS Πλήρες Όνομα FROM Client Παράδειγμα 6.2. Λήψη λίστας εταιρειών που υποδεικνύει τα ονόματα και τα αρχικά των πελατών.

Το ερώτημα χρησιμοποιεί την ενσωματωμένη συνάρτηση Left , η οποία σας επιτρέπει να κόψετε έναν χαρακτήρα από τα αριστερά σε μια μεταβλητή κειμένου σε αυτήν την περίπτωση.

Παράδειγμα 6.3.Λάβετε μια λίστα προϊόντων με το έτος και τον μήνα πώλησης.

SELECT Item.Name, Year(Trade.Date) AS Year, Month(Trade.Date) AS Month FROM Item INNER JOIN Συναλλαγή ON Item.ItemID=Trade.ItemID Παράδειγμα 6.3. Λήψη λίστας προϊόντων με έτος και μήνα πώλησης.

Το ερώτημα χρησιμοποιεί τις ενσωματωμένες συναρτήσεις Έτος και Μήνας για την εξαγωγή του έτους και του μήνα από μια ημερομηνία.

Χρήση συναρτήσεων σύνοψης

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

Ο χρήστης έχει πρόσβαση στα ακόλουθα συνοπτικές συναρτήσεις:

  • Count (Expression) - καθορίζει τον αριθμό των εγγραφών στο σύνολο εξόδου του ερωτήματος SQL.
  • Ελάχιστο / Μέγιστο (Έκφραση) - προσδιορίστε το μικρότερο και το μεγαλύτερο από το σύνολο τιμών σε ένα συγκεκριμένο πεδίο του αιτήματος.
  • Μέσος όρος (Έκφραση) - αυτή η συνάρτηση σάς επιτρέπει να υπολογίσετε τη μέση τιμή του συνόλου τιμών που είναι αποθηκευμένα σε ένα συγκεκριμένο πεδίο των εγγραφών που επιλέγονται από το ερώτημα. Είναι ένας αριθμητικός μέσος όρος, δηλ. το άθροισμα των τιμών διαιρεμένο με τον αριθμό τους.
  • Άθροισμα (Έκφραση) - υπολογίζει το άθροισμα του συνόλου των τιμών που περιέχονται σε ένα συγκεκριμένο πεδίο των εγγραφών που επιλέγονται από το ερώτημα.

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

Όλες αυτές οι συναρτήσεις λειτουργούν σε τιμές σε μια στήλη ενός πίνακα ή σε μια αριθμητική παράσταση και επιστρέφουν μια ενιαία τιμή. Οι συναρτήσεις COUNT , MIN και MAX ισχύουν τόσο για αριθμητικά όσο και για μη αριθμητικά πεδία, ενώ οι συναρτήσεις SUM και AVG μπορούν να χρησιμοποιηθούν μόνο στην περίπτωση αριθμητικών πεδίων, με εξαίρεση το COUNT(*) . Κατά τον υπολογισμό των αποτελεσμάτων οποιωνδήποτε συναρτήσεων, πρώτα εξαιρούνται όλες οι μηδενικές τιμές, μετά την οποία η απαιτούμενη λειτουργία εφαρμόζεται μόνο στις υπόλοιπες συγκεκριμένες τιμές της στήλης. Η παραλλαγή COUNT(*) είναι μια ειδική περίπτωση χρήσης της συνάρτησης COUNT, ο σκοπός της είναι να μετρήσει όλες τις σειρές στον πίνακα που προκύπτει, είτε περιέχουν nulls, διπλότυπα ή οποιεσδήποτε άλλες τιμές.

Εάν θέλετε να εξαλείψετε τις διπλότυπες τιμές πριν χρησιμοποιήσετε μια γενική συνάρτηση, πρέπει να προηγηθεί το όνομα της στήλης στον ορισμό της συνάρτησης με τη λέξη-κλειδί DISTINCT . Δεν έχει νόημα για τις συναρτήσεις MIN και MAX, αλλά η χρήση του μπορεί να επηρεάσει τα αποτελέσματα των συναρτήσεων SUM και AVG, επομένως πρέπει να εξετάσετε εκ των προτέρων εάν θα πρέπει να υπάρχει σε κάθε συγκεκριμένη περίπτωση. Επιπλέον, η λέξη-κλειδί DISTINCT μπορεί να καθοριστεί το πολύ μία φορά σε οποιοδήποτε ερώτημα.

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

Παράδειγμα 6.4.Προσδιορίστε το όνομα του πρώτου στοιχείου με αλφαβητική σειρά.

SELECT Min(Item.Name) AS Min_Name FROM Product Παράδειγμα 6.4. Προσδιορισμός του ονόματος του πρώτου στοιχείου με αλφαβητική σειρά.

Παράδειγμα 6.5.Προσδιορίστε τον αριθμό των συναλλαγών.

SELECT Count(*) AS Number of_trades FROM Trade Παράδειγμα 6.5. Προσδιορίστε τον αριθμό των συναλλαγών.

Παράδειγμα 6.6.Προσδιορίστε τη συνολική ποσότητα των αγαθών που πωλήθηκαν.

SELECT Sum(Trade.Quantity) AS Product_Quantity FROM Trade Παράδειγμα 6.6. Προσδιορισμός της συνολικής ποσότητας των εμπορευμάτων που πωλήθηκαν.

Παράδειγμα 6.7.Προσδιορίστε τη μέση τιμή του προϊόντος που πωλήθηκε.

ΕΠΙΛΕΞΤΕ Μέσο (Item.Price) AS Μέσο_Τιμή ΑΠΟ Στοιχείο ΕΣΩΤΕΡΙΚΗ ΣΥΜΜΕΤΟΧΗ Συναλλαγές ON Item.ItemID=Trade.ItemID; Παράδειγμα 6.7. Προσδιορισμός της μέσης τιμής των πωληθέντων αγαθών.

SELECT Sum(Item.Price*Trade.Quantity) AS Cost FROM Item INNER JOIN Trade ON Item.ItemID=Trade.ItemID Παράδειγμα 6.8. Υπολογισμός του συνολικού κόστους των πωληθέντων αγαθών.

ΟΜΑΔΑ ΑΝΑ προσφορά

Τα ερωτήματα συχνά απαιτούν τη δημιουργία μερικών συνόλων, τα οποία συνήθως υποδεικνύονται με τη φράση "για κάθε..." στο ερώτημα. Η πρόταση SELECT χρησιμοποιεί τον όρο GROUP BY για αυτό το σκοπό. Ένα ερώτημα που έχει GROUP BY ονομάζεται ερώτημα ομαδοποίησης επειδή ομαδοποιεί τα δεδομένα από τη λειτουργία SELECT και στη συνέχεια δημιουργεί μια ενιαία γραμμή σύνοψης για κάθε μεμονωμένη ομάδα. Το πρότυπο SQL απαιτεί η ρήτρα SELECT και η ρήτρα GROUP BY να συνδέονται στενά. Όταν υπάρχει ένας όρος GROUP BY στη δήλωση SELECT, κάθε στοιχείο λίστας στον όρο SELECT πρέπει να έχει μια ενιαία τιμή για ολόκληρη την ομάδα. Επιπλέον, η ρήτρα SELECT μπορεί να περιλαμβάνει μόνο τους ακόλουθους τύπους στοιχείων: ονόματα πεδίων, συνοπτικές συναρτήσεις, σταθερές και εκφράσεις που περιλαμβάνουν συνδυασμούς των παραπάνω στοιχείων.

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

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

Το πρότυπο SQL καθορίζει ότι όλες οι τιμές που λείπουν θεωρούνται ίσες κατά την ομαδοποίηση. Εάν δύο σειρές πίνακα περιέχουν NULL στην ίδια στήλη ομαδοποίησης και ίδιες τιμές σε όλες τις άλλες μη κενές στήλες ομαδοποίησης, τοποθετούνται στην ίδια ομάδα.

Παράδειγμα 6.9.Υπολογίστε τον μέσο όγκο αγορών που πραγματοποίησε κάθε πελάτης.

SELECT Client.LastName, Avg(Deal.Quantity) AS Average_Quantity FROM Client INNER JOIN Transaction ON Client.ClientID=Transaction.ClientID GROUP BY Client.LastName Παράδειγμα 6.9. Υπολογισμός του μέσου όγκου αγορών που πραγματοποιεί κάθε πελάτης.

Η φράση "από κάθε πελάτη" αντικατοπτρίζεται στο ερώτημα SQL ως πρόταση ΟΜΑΔΑ ΑΝΑ Πελάτη.Επώνυμο.

Παράδειγμα 6.10.Προσδιορίστε το ποσό για το οποίο πωλήθηκε το προϊόν κάθε είδους.

SELECT Item.Name, Sum(Item.Price*Trade.Quantity) AS Cost FROM Item INNER JOIN Συναλλαγή ON Item.ItemID=Trade.ItemID GROUP BY Item.Name Παράδειγμα 6.10. Προσδιορισμός του ποσού για το οποίο πωλήθηκε το προϊόν κάθε είδους.

SELECT Client.Company, Count(Deal.DealCode) AS Number_of_deals FROM Client INNER JOIN Deal ON Client.ClientId=Trade.ClientID GROUP BY Client.Company Παράδειγμα 6.11. Καταμέτρηση του αριθμού των συναλλαγών που πραγματοποιήθηκαν από κάθε επιχείρηση.

SELECT Customer.Company, Sum(Trade.Quantity) AS Total_Quantity, Sum(Item.Price*Trade.Quantity) AS Cost FROM Commodity ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ (Customer INNER JOIN Trade ON Customer.CustomerId=TramerIdityonTe. .Κωδικός Προϊόντος ΟΜΑΔΑ ΑΝΑ Πελάτη.Εταιρεία Παράδειγμα 6.12. Υπολογισμός του συνολικού αριθμού των αγαθών που αγοράζονται για κάθε εταιρεία και του κόστους της.

Παράδειγμα 6.13.Προσδιορίστε το συνολικό κόστος κάθε προϊόντος για κάθε μήνα.

SELECT Item.Name, Month(Trade.Date) AS Month, Sum(Item.Price*Trade.Quantity) AS Cost FROM Item INNER JOIN Trade ON Item.ItemID=Trade.ItemID GROUP BY Item.Όνομα, Μήνας(Trade.Date ) Παράδειγμα 6.13. Προσδιορισμός του συνολικού κόστους κάθε προϊόντος για κάθε μήνα.

Παράδειγμα 6.14.Προσδιορίστε το συνολικό κόστος κάθε είδους της πρώτης τάξης για κάθε μήνα.

SELECT Item.Name, Month(Trade.Date) AS Month, Sum(Item.Price*Trade.Quantity) AS Cost FROM Item INNER JOIN Trade ON Item.ItemID=Trade.ItemID WHERE Item.Sort="First" GROUP BY Item .Τίτλος, Μήνας (Συμφωνία.Ημερομηνία) Παράδειγμα 6.14. Προσδιορισμός του συνολικού κόστους κάθε προϊόντος πρώτης κατηγορίας για κάθε μήνα.

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

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

Οι συνθήκες στο HAVING είναι διαφορετικές από τις συνθήκες στο WHERE:

  • Το HAVING εξαιρεί ομάδες με αποτελέσματα συγκεντρωτικών τιμών από το σύνολο δεδομένων αποτελεσμάτων.
  • WHERE εξαιρεί εγγραφές που δεν πληρούν την προϋπόθεση από τον υπολογισμό των συγκεντρωτικών τιμών με ομαδοποίηση.
  • Οι συναρτήσεις συγκεντρωτικών δεν μπορούν να καθοριστούν στη συνθήκη αναζήτησης WHERE.

Παράδειγμα 6.15.Προσδιορίστε τις εταιρείες των οποίων ο συνολικός αριθμός συναλλαγών υπερβαίνει τις τρεις.

SELECT Client.Company, Count(Trade.Count) AS Number of_trades FROM Client INNER JOIN Trade ON Client.ClientCode=Trade.ClientID GROUP BY Client.Company HAVING Count(Trade.Count)>3 Παράδειγμα 6.15. Προσδιορισμός εταιρειών των οποίων ο συνολικός αριθμός συναλλαγών υπερβαίνει τις τρεις.

Παράδειγμα 6.16.Εμφανίστε μια λίστα με προϊόντα που πωλήθηκαν για περισσότερα από 10.000 ρούβλια.

ΕΠΙΛΕΞΤΕ Είδος.Όνομα, Άθροισμα(Είδος.Τιμή*Εμπόριο.Ποσότητα) ΩΣ Κόστος ΑΠΟ Στοιχείο ΕΣΩΤΕΡΙΚΗ ΣΥΜΜΕΤΟΧΗ Εμπόριο ON Item.Item.ItemID=Trade.ItemID GROUP BY Item.Όνομα ΕΧΕΙ ΠΟΣΟ (Είδος.Τιμή*Εμπόριο.100000) Παράδειγμα 6.16. Εμφάνιση λίστας προϊόντων που πωλήθηκαν για περισσότερα από 10.000 ρούβλια.

Παράδειγμα 6.17.Εμφανίστε μια λίστα προϊόντων που πωλήθηκαν για περισσότερα από 10.000 χωρίς να προσδιορίσετε το ποσό.

SELECT Item.Name FROM Item INNER JOIN Trade ON Item.ItemCode=Trade.ItemID GROUP BY Item.Name HAVING Sum(Item.Price*Trade.Quantity)>10000 Παράδειγμα 6.17. Εμφανίστε μια λίστα προϊόντων που πωλήθηκαν για περισσότερα από 10.000 χωρίς να προσδιορίσετε το ποσό.

Σε αυτό το σεμινάριο, θα μάθετε πώς να το χρησιμοποιείτε Συνάρτηση SUMστον SQL Server (Transact-SQL) με σύνταξη και παραδείγματα.

Περιγραφή

Σε SQL Server (Transact-SQL) Συνάρτηση SUMεπιστρέφει τη συνολική τιμή της παράστασης.

Σύνταξη

Η σύνταξη για τη συνάρτηση SUM στον SQL Server (Transact-SQL) είναι:

Ή τη σύνταξη της συνάρτησης SUM κατά την ομαδοποίηση των αποτελεσμάτων κατά μία ή περισσότερες στήλες:

Επιλογές ή Επιχειρήματα

express1 , expression2 , ... express_n είναι εκφράσεις που δεν περιλαμβάνονται στη συνάρτηση SUM και πρέπει να συμπεριληφθούν στον όρο GROUP BY στο τέλος της πρότασης SQL.
aggregate_expression είναι η στήλη ή η έκφραση που θα αθροιστεί.
πίνακες - πίνακες από τους οποίους θέλετε να λάβετε εγγραφές. Πρέπει να υπάρχει τουλάχιστον ένας πίνακας στη λίστα FROM.
Όπου προϋποθέσεις - προαιρετικό. Αυτές είναι οι προϋποθέσεις που πρέπει να πληρούνται για τις επιλεγμένες εγγραφές.

Εφαρμογή

Η συνάρτηση SUM μπορεί να χρησιμοποιηθεί στις ακόλουθες εκδόσεις του SQL Server (Transact-SQL):
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005

Παράδειγμα μεμονωμένου πεδίου

Σκεφτείτε μερικά Παραδείγματα SQLΛειτουργία SUM διακομιστή για να κατανοήσετε πώς να χρησιμοποιήσετε τη συνάρτηση SUM στον SQL Server (Transact-SQL).

Για παράδειγμα, μπορείτε να μάθετε πώς ο συνολικός αριθμός όλων των προϊόντων των οποίων ο αριθμός είναι μεγαλύτερος από 10.

Σε αυτό το παράδειγμα συνάρτησης SUM, έχουμε ονομάσει την έκφραση SUM(quantity ) "Total Quantity". Όταν επιστρέφετε ένα σύνολο αποτελεσμάτων - η "Συνολική Ποσότητα" θα εμφανίζεται ως όνομα πεδίου.

ΔΙΑΚΡΙΤΙΚΟ παράδειγμα

Μπορείτε να χρησιμοποιήσετε τη δήλωση DISTINCT στη συνάρτηση SUM. Για παράδειγμα, η παρακάτω δήλωση SQL επιστρέφει το συνολικό ποσό του μισθού με μοναδικές αξίεςμισθός , όπου ο μισθός είναι κάτω από 29.000 $ ετησίως.

Εάν δύο μισθοί ήταν 24.000 $ ετησίως, μόνο μία από αυτές τις τιμές θα χρησιμοποιηθεί στη συνάρτηση SUM.

Παράδειγμα τύπου

Η έκφραση που περιέχεται στη συνάρτηση SUM δεν χρειάζεται να είναι ένα μόνο πεδίο. Μπορείτε επίσης να χρησιμοποιήσετε μια φόρμουλα. Για παράδειγμα, μπορείτε να υπολογίσετε τη συνολική προμήθεια.

Συναλλαγή SQL

ΕΠΙΛΕΞΤΕ ΠΟΣΟ (πωλήσεις * 0,03) ΩΣ "Συνολική προμήθεια" ΑΠΟ παραγγελίες.

SELECT SUM (πωλήσεις * 0,03 ) ΩΣ "Συνολική προμήθεια"

ΑΠΟ παραγγελίες ;

ΟΜΑΔΑ ΑΝΑ παράδειγμα

Σε ορισμένες περιπτώσεις, θα χρειαστεί να χρησιμοποιήσετε την ρήτρα GROUP BY με τη συνάρτηση SUM.

SQL - Μάθημα 11. Συναρτήσεις σύνοψης, υπολογισμένες στήλες και προβολές

Οι τελικές συναρτήσεις ονομάζονται επίσης στατιστικές, συγκεντρωτικές ή αθροιστικές. Αυτές οι συναρτήσεις επεξεργάζονται ένα σύνολο σειρών για να μετρήσουν και να επιστρέψουν μια ενιαία τιμή. Υπάρχουν πέντε τέτοιες λειτουργίες:
  • AVG() Η συνάρτηση επιστρέφει τη μέση τιμή μιας στήλης.

  • COUNT() Η συνάρτηση επιστρέφει τον αριθμό των γραμμών σε μια στήλη.

  • MAX() Η συνάρτηση επιστρέφει τη μεγαλύτερη τιμή σε μια στήλη.

  • MIN() Η συνάρτηση επιστρέφει τη μικρότερη τιμή σε μια στήλη.

  • SUM() Η συνάρτηση επιστρέφει το άθροισμα των τιμών της στήλης.

Ένα από αυτά - COUNT() - έχουμε ήδη συναντηθεί στο μάθημα 8. Τώρα ας γνωρίσουμε τα υπόλοιπα. Ας υποθέσουμε ότι θέλαμε να μάθουμε την ελάχιστη, τη μέγιστη και τη μέση τιμή των βιβλίων στο κατάστημά μας. Στη συνέχεια, από τον πίνακα Τιμές (τιμές) πρέπει να λάβετε τις ελάχιστες, μέγιστες και μέσες τιμές για τη στήλη τιμών. Το αίτημα είναι απλό:

SELECT MIN(τιμή), MAX(τιμή), AVG(τιμή) FROM τιμές.

Τώρα, θέλουμε να μάθουμε πόσο μας έφερε τα εμπορεύματα ο προμηθευτής "Τυπογραφείο" (id=2). Το να κάνεις ένα τέτοιο αίτημα δεν είναι εύκολο. Ας σκεφτούμε πώς να το φτιάξουμε:

1. Αρχικά, πρέπει να επιλέξετε τα αναγνωριστικά (id_incoming) εκείνων των παραδόσεων που πραγματοποιήθηκαν από τον προμηθευτή "Print House" (id=2) από τον πίνακα Παραδόσεις (εισερχόμενα):

2. Τώρα, από τον πίνακα ημερολογίου προμήθειας (περιοδικό_εισερχόμενο), πρέπει να επιλέξετε τα αγαθά (id_product) και τις ποσότητες τους (ποσότητα), που πραγματοποιήθηκαν στις παραδόσεις που αναφέρονται στην παράγραφο 1. Δηλαδή, το αίτημα από το σημείο 1 γίνεται ένθετο:

3. Τώρα πρέπει να προσθέσουμε στον πίνακα που προκύπτει τις τιμές για τα προϊόντα που βρέθηκαν, οι οποίες αποθηκεύονται στον πίνακα Τιμές. Δηλαδή, πρέπει να ενώσουμε τους πίνακες Supply journal (magazine_incoming) και Prices (τιμές) από τη στήλη id_product:

4. Στον πίνακα που προκύπτει λείπει σαφώς η στήλη Sum, δηλαδή υπολογιζόμενη στήλη. Η δυνατότητα δημιουργίας τέτοιων στηλών παρέχεται στη MySQL. Για να το κάνετε αυτό, απλά πρέπει να καθορίσετε στο ερώτημα το όνομα της υπολογιζόμενης στήλης και τι πρέπει να υπολογίζει. Στο παράδειγμά μας, μια τέτοια στήλη θα ονομάζεται άθροισμα και θα υπολογίζει το γινόμενο των στηλών ποσότητας και τιμής. Το όνομα της νέας στήλης διαχωρίζεται με τη λέξη AS:

SELECT magazine_incoming.id_product, magazine_incoming.quantity, Prices.price, Magazine_incoming.quantity*prices.price AS summa FROM magazine_incoming, Prices WHERE magazine_incoming.id_product= Prices.id_product AND id_SELECTorHE_incoming )

5. Ωραία, το μόνο που μας μένει είναι να συνοψίσουμε τη στήλη άθροισης και επιτέλους να μάθουμε πόσο μας έφερε τα εμπορεύματα ο προμηθευτής "Τυπογραφείο". Η σύνταξη για τη χρήση της συνάρτησης SUM() είναι η εξής:

SELECT SUM(column_name) FROM table_name;

Γνωρίζουμε το όνομα της στήλης - summa, αλλά δεν έχουμε το όνομα του πίνακα, αφού είναι το αποτέλεσμα του ερωτήματος. Τι να κάνω? Για τέτοιες περιπτώσεις, η MySQL έχει Προβολές. Μια προβολή είναι ένα επιλεγμένο ερώτημα στο οποίο δίνεται ένα μοναδικό όνομα και μπορεί να αποθηκευτεί σε μια βάση δεδομένων για μελλοντική χρήση.

Η σύνταξη για τη δημιουργία μιας προβολής είναι η εξής:

CREATE VIEW view_name ΩΣ ερώτημα.

Ας αποθηκεύσουμε το αίτημά μας ως αναλυτική προβολή με το όνομα report_vendor:

ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ report_vendor AS SELECT magazine_incoming.id_product, magazine_incoming.quantity, Prices.price, magazine_incoming.quantity*prices.price AS άθροισμα ΑΠΟ magazine_incoming, τιμές WHERE περιοδικό_εισερχόμενο. ing WHERE id_vendor=2 )

6. Τώρα μπορείτε να χρησιμοποιήσετε την τελική συνάρτηση SUM():

SELECT SUM(summa) FROM report_vendor;

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

Υπολογιζόμενα πεδία (στήλες)

Σε ένα παράδειγμα, εξετάσαμε σήμερα ένα μαθηματικό υπολογισμένο πεδίο. Εδώ θα ήθελα να προσθέσω ότι μπορείτε να χρησιμοποιήσετε όχι μόνο την πράξη πολλαπλασιασμού (*), αλλά και την αφαίρεση (-), και την πρόσθεση (+), και τη διαίρεση (/). Η σύνταξη είναι η εξής:

SELECT col_name_1, col_name_2, col_name_1*col_name_2 AS computed_column_name FROM table_name;

Η δεύτερη απόχρωση είναι η λέξη-κλειδί AS, τη χρησιμοποιήσαμε για να ορίσουμε το όνομα της υπολογιζόμενης στήλης. Στην πραγματικότητα, αυτή η λέξη-κλειδί ορίζει ψευδώνυμα για οποιεσδήποτε στήλες. Γιατί χρειάζεται αυτό; Για μείωση κώδικα και αναγνωσιμότητα. Για παράδειγμα, η άποψή μας μπορεί να μοιάζει με αυτό:

CREATE VIEW report_vendor AS SELECT A.id_product, A.quantity, B.price, A.quantity*B.price AS summa FROM magazine_incoming AS A, τιμές AS B WHERE A.id_product= B.id_product AND id_incoming= (SELECT id_incoming FROM WHERE id_vendor=2);

Συμφωνήστε ότι αυτό είναι πολύ πιο σύντομο και σαφές.

Αναπαράσταση

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

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

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

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

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

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

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

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

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

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

ΟΜΑΔΑ ΑΝΑ προσφορά

ΟΜΑΔΑ ΑΝΑ προσφοράχρησιμοποιείται για τον καθορισμό ομάδων γραμμών εξόδου στις οποίες μπορούν να εφαρμοστούν συγκεντρωτικές συναρτήσεις (COUNT, MIN, MAX, AVG και SUM). Εάν αυτή η ρήτρα λείπει και χρησιμοποιούνται συγκεντρωτικές συναρτήσεις, τότε όλες οι στήλες με τα ονόματα που αναφέρονται στο ΕΠΙΛΕΓΩ, θα πρέπει να περιλαμβάνονται σε αθροιστικές συναρτήσεις, και αυτές οι συναρτήσεις θα εφαρμοστούν σε ολόκληρο το σύνολο σειρών που ικανοποιούν το κατηγόρημα του ερωτήματος. Διαφορετικά, όλες οι στήλες της λίστας SELECT, Δεν περιλαμβάνονταισε συγκεντρωτικές συναρτήσεις, πρέπει να προσδιορίζονται V προσφορά GROUPΜΕ. Ως αποτέλεσμα, όλες οι σειρές εξόδου του ερωτήματος χωρίζονται σε ομάδες που χαρακτηρίζονται από τους ίδιους συνδυασμούς τιμών σε αυτές τις στήλες. Μετά από αυτό, θα εφαρμοστούν συγκεντρωτικές συναρτήσεις σε κάθε ομάδα. Σημειώστε ότι για το 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, προέκυψε ένα αποτέλεσμα που υπερέβαινε τη μέγιστη τιμή του χρησιμοποιούμενου τύπου δεδομένων, λάθος.

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

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

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