Sql sum με συνθήκη. Συγκεντρωτικές συναρτήσεις SQL - SUM, MIN, MAX, AVG, COUNT. Επιλογές ή Επιχειρήματα

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

Όλες αυτές οι συναρτήσεις επιστρέφουν μία μόνο τιμή. Ταυτόχρονα, οι λειτουργίες 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, προέκυψε ένα αποτέλεσμα που υπερέβαινε τη μέγιστη τιμή του χρησιμοποιούμενου τύπου δεδομένων, λάθος.

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

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

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

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

Συντακτικό συνάρτησης

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

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

sum(a) - εδώ κάποια αριθμητική τιμή ή έκφραση χρησιμοποιείται ως παράμετρος a

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

Παράδειγμα χρήσης SUM σε SQL

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

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

ΕΠΙΛΕΞΤΕ Είδος, άθροισμα (Ποσό Αγοράς) ΑΠΟ Ομαδοποίηση Πωλήσεων ανά είδος.

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

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

SELECT Item FROM (SELECT Item, άθροισμα (Ποσό Αγοράς) ως Sum FROM Sales) WHERE Άθροισμα > 100.

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. Επομένως, δεν πρέπει να γίνεται κατάχρηση.

Σε αυτό οδηγός μελέτηςθα μάθετε πώς να χρησιμοποιείτε Συνάρτηση SUM V 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

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

Ας δούμε μερικά παραδείγματα συναρτήσεων SUM Server για να κατανοήσουμε πώς να χρησιμοποιήσετε τη συνάρτηση 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, αλλά τα αποτελέσματα των τιμών των στηλών των πινάκων της βάσης δεδομένων. Οι αθροιστικές συναρτήσεις 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 (μη καθορισμένη). Εάν χρησιμοποιήσετε έναν αστερίσκο ως όρισμα και ξεκινήσετε ένα ερώτημα SELECT 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;):

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

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

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

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




Μπλουζα