ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΗ
Συνοπτικές συναρτήσεις
Οι εκφράσεις ερωτήματος SQL συχνά απαιτούν προεπεξεργασία δεδομένων. Για το σκοπό αυτό χρησιμοποιούνται ειδικές λειτουργίεςκαι εκφράσεις.
Πολύ συχνά χρειάζεται να μάθετε πόσες εγγραφές ταιριάζουν με ένα συγκεκριμένο ερώτημα,ποιο είναι το άθροισμα των τιμών μιας ορισμένης αριθμητικής στήλης, οι μέγιστες, οι ελάχιστες και οι μέσες τιμές της. Για το σκοπό αυτό χρησιμοποιούνται οι λεγόμενες τελικές (στατιστικές, συγκεντρωτικές) συναρτήσεις. Οι συναρτήσεις σύνοψης επεξεργάζονται σύνολα εγγραφών που καθορίζονται, για παράδειγμα, από έναν όρο WHERE. Εάν τις συμπεριλάβετε στη λίστα στηλών μετά τη δήλωση SELECT, ο πίνακας που προκύπτει θα περιέχει όχι μόνο τις στήλες του πίνακα της βάσης δεδομένων, αλλά και τις τιμές που υπολογίζονται από αυτές τις συναρτήσεις. Το παρακάτω είναιλίστα συνοπτικών συναρτήσεων.
SELECT COUNT(*) FROM Clients.
SELECT COUNT(Order_Amount) ΑΠΟ Πελάτες.
ΕΠΙΛΕΞΤΕ ΑΡΙΘΜΟ (ΔΙΑΚΡΙΤΗ_Ποσό Παραγγελίας) ΑΠΟ Πελάτες.
Προσπαθώντας να εκτελέσετε το ακόλουθο ερώτημα θα οδηγήσει σε ένα μήνυμα σφάλματος:
SELECT Region , COUNT(*) FROM Clients ;
ΕΠΙΛΟΓΗ ΣΥΝΘΕΣΗΣ (Ποσό_Παραγγελίας) ΑΠΟ Πελάτες.
Αυτή η δήλωση SQL επιστρέφει έναν πίνακα μίας στήλης, μίας εγγραφής που περιέχει το άθροισμα όλων των καθορισμένων τιμών για τη στήλη Order_Amount από τον πίνακα Customers.
Ας υποθέσουμε ότι στον πίνακα πηγής οι τιμές της στήλης Order_Amount εκφράζονται σε ρούβλια και πρέπει να υπολογίσουμε το συνολικό ποσό σε δολάρια. Εάν η τρέχουσα συναλλαγματική ισοτιμία είναι, για παράδειγμα, 27,8, τότε μπορείτε να λάβετε το απαιτούμενο αποτέλεσμα χρησιμοποιώντας την έκφραση:
ΕΠΙΛΟΓΗ ΣΥΝΘΕΣΗΣ (Ποσό_παραγγελίας*27,8) ΑΠΟ Πελάτες.
SELECT AVG (Order_Amount) ΑΠΟ Πελάτες.
ΕΠΙΛΟΓΗ AVG (Order_Amount*27,8) FROM Clients
ΠΟΥ Περιφέρεια<>"North_3west";
SELECT MAX(Order_Amount) FROM Clients.
SELECT MAX(Order_Amount*27,8) FROM Clients
ΟΠΟΥ Περιοχή<>"North_3west";
SELECT MIN(Order_Amount) FROM Customers.
ΕΠΙΛΕΞΤΕ MIN (Ποσό Παραγγελίας*27,8) ΑΠΟ Πελάτες
ΟΠΟΥ Περιοχή<>"North_3west";
Στην πράξη, είναι συχνά απαραίτητο να ληφθεί ένας συνοπτικός πίνακας που περιέχει τις συνολικές, μέσες, μέγιστες και ελάχιστες τιμές των αριθμητικών στηλών. Για να το κάνετε αυτό, θα πρέπει να χρησιμοποιήσετε συναρτήσεις ομαδοποίησης (ΟΜΑΔΑ ΑΝΑ) και σύνοψης.
SELECT Region, SUM (Ποσό_παραγγελίας) ΑΠΟ Πελάτες
ΟΜΑΔΑ ΑΝΑ Περιοχή?
Ο πίνακας αποτελεσμάτων για αυτό το ερώτημα περιέχει τα ονόματα των περιοχών και τα συνολικά (συνολικά) ποσά παραγγελιών από όλους τους πελάτες από τις αντίστοιχες περιοχές (Εικ. 5).
Τώρα εξετάστε ένα αίτημα για να λάβετε όλα τα συνοπτικά δεδομένα ανά περιοχή:
SELECT Region, SUM (Order_Amount), AVG (Ποσό_παραγγελίας), MAX(Ποσό_παραγγελίας), MIN (Order_amount)
ΑΠΟ Πελάτες
ΟΜΑΔΑ ΑΝΑ Περιοχή?
Οι πίνακες αρχικού και αποτελεσμάτων φαίνονται στο Σχ. 8. Στο παράδειγμα, μόνο η βορειοδυτική περιοχή αντιπροσωπεύεται στον πίνακα πηγής με περισσότερες από μία εγγραφές. Επομένως, στον πίνακα αποτελεσμάτων για αυτό, διαφορετικές συναρτήσεις σύνοψης δίνουν διαφορετικές τιμές.
Ρύζι. 8. Τελικός πίνακας ποσών παραγγελιών ανά περιοχή
Όταν χρησιμοποιείτε συναρτήσεις σύνοψης σε μια λίστα στηλών σε μια πρόταση SELECT, οι κεφαλίδες των αντίστοιχων στηλών τους στον πίνακα αποτελεσμάτων είναι Expr1001, Expr1002 και ούτω καθεξής. (ή κάτι παρόμοιο, ανάλογα με την υλοποίηση της SQL). Ωστόσο, μπορείτε να ορίσετε κεφαλίδες για τις τιμές των συναρτήσεων σύνοψης και άλλων στηλών κατά την κρίση σας. Για να το κάνετε αυτό, ακριβώς μετά τη στήλη στη δήλωση SELECT, καθορίστε μια έκφραση της φόρμας:
AS στήλη_επικεφαλίδα
Η λέξη-κλειδί AS (όπως) σημαίνει ότι στον πίνακα αποτελεσμάτων, η αντίστοιχη στήλη πρέπει να έχει μια επικεφαλίδα που καθορίζεται μετά το AS. Ο εκχωρημένος τίτλος ονομάζεται επίσης ψευδώνυμο. Το ακόλουθο παράδειγμα (Εικόνα 9) ορίζει ψευδώνυμα για όλες τις υπολογιζόμενες στήλες:
ΕΠΙΛΟΓΗ Περιοχής,
ΠΟΣΟ (Order_amount) ΩΣ [Order_total],
AVG (Order_Amount) ΩΣ [Μέσος όρος παραγγελίας],
MAX(Order_Amount) AS Μέγιστο,
MIN (Ποσό_παραγγελίας) ΩΣ ελάχιστο,
ΑΠΟ Πελάτες
ΟΜΑΔΑ ΑΝΑ Περιοχή?
Ρύζι. 9. Τελικός πίνακας ποσών παραγγελιών ανά περιοχή χρησιμοποιώντας ψευδώνυμα στηλών
Τα ψευδώνυμα που αποτελούνται από πολλές λέξεις που χωρίζονται με κενά περικλείονται σε αγκύλες.
Οι συναρτήσεις σύνοψης μπορούν να χρησιμοποιηθούν στις προτάσεις SELECT και HAVING, αλλά δεν μπορούν να χρησιμοποιηθούν στις προτάσεις WHERE. Ο τελεστής HAVING είναι παρόμοιος με τον τελεστή WHERE, αλλά σε αντίθεση με το WHERE επιλέγει εγγραφές σε ομάδες.
Ας υποθέσουμε ότι θέλετε να προσδιορίσετε ποιες περιοχές έχουν περισσότερους από έναν πελάτες. Για το σκοπό αυτό, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα:
ΕΠΙΛΟΓΗ Περιοχής , Καταμέτρηση(*)
ΑΠΟ Πελάτες
ΟΜΑΔΑ ΑΝΑ ΠΕΡΙΟΧΗ ΜΕ ΑΡΙΘΜΟ(*) > 1;
Λειτουργίες επεξεργασίας αξίας
Όταν εργάζεστε με δεδομένα, συχνά πρέπει να τα επεξεργαστείτε (να τα μετατρέψετε σε ο σωστός τύπος): επιλέξτε μια δευτερεύουσα συμβολοσειρά σε μια συμβολοσειρά, αφαιρέστε τα κενά που οδηγούν και τα τελικά, στρογγυλοποιήστε έναν αριθμό, υπολογίστε την τετραγωνική ρίζα, προσδιορίστε τρέχουσα ώρακ.λπ. Υπάρχουν τρεις τύποι συναρτήσεων στην SQL:
Συναρτήσεις συμβολοσειράς
Οι συναρτήσεις συμβολοσειράς λαμβάνουν μια συμβολοσειρά ως παράμετρο και επιστρέφουν μια συμβολοσειρά ή NULL μετά την επεξεργασία της.
Για παράδειγμα:
SUBSTRING ("Dear Masha!" FROM 9 FOR 4) επιστρέφει "Masha";
SUBSTRING ("Dear Masha!" FROM 9) επιστρέφει "Masha!";
SUBSTRING ("Αγαπητή Μάσα!" ΑΠΟ 15) επιστρέφει NULL.
Μπορείτε να χρησιμοποιήσετε αυτήν τη συνάρτηση σε μια έκφραση SQL, για παράδειγμα, ως εξής:
ΕΠΙΛΟΓΗ * ΑΠΟ Πελάτες
WHERE SUBSTRING (Περιοχή ΑΠΟ 1 ΓΙΑ 5) = "North";
Για παράδειγμα:
TRIM (LEADING " " FROM "city of St. Petersburg") περιστρέφει την "city of St. Petersburg";
TRIM(TRALING " " FROM "city of St. Petersburg") επιστρέφει "city of St. Petersburg";
TRIM (ΔΥΟ " " ΑΠΟ " πόλη Αγία Πετρούπολη ") επιστρέφει "πόλη Αγία Πετρούπολη"?
Το TRIM (ΔΥΟ ΑΠΟ "Πόλη της Αγίας Πετρούπολης") επιστρέφει "πόλη της Αγίας Πετρούπολης"?
Η TRIM(ΔΥΟ "g" ΑΠΟ "city of St. Petersburg") επιστρέφει "city of St. Petersburg".
Μεταξύ αυτών των συναρτήσεων, οι πιο συχνά χρησιμοποιούμενες είναι οι SUBSTRING() ΚΑΙ TRIM().
Αριθμητικές συναρτήσεις
Οι αριθμητικές συναρτήσεις μπορούν να δεχτούν δεδομένα όχι μόνο ως παράμετρο αριθμητικός τύπος, αλλά πάντα επιστρέφετε έναν αριθμό ή NULL (απροσδιόριστη τιμή).
Για παράδειγμα:
POSITION("e" ΣΤΟ "Γεια σε όλους") επιστρέφει 5;
POSITION ("όλοι" ΣΤΟ "Γεια σε όλους") επιστρέφει 8.
POSITION(" "Γεια σε όλους") επιστρέφει 1;
POSITION ("Hello!" IN "Hello all") επιστρέφει 0.
Στον πίνακα Πελάτες (βλ. Εικ. 1), η στήλη Διεύθυνση περιέχει, εκτός από το όνομα της πόλης, τον ταχυδρομικό κώδικα, το όνομα της οδού και άλλα δεδομένα. Ίσως χρειαστεί να επιλέξετε αρχεία για πελάτες που ζουν σε μια συγκεκριμένη πόλη. Επομένως, εάν θέλετε να επιλέξετε εγγραφές που σχετίζονται με πελάτες που ζουν στην Αγία Πετρούπολη, μπορείτε να χρησιμοποιήσετε την ακόλουθη έκφραση ερωτήματος SQL:
ΕΠΙΛΟΓΗ * ΑΠΟ Πελάτες
WHERE POSITION (" Αγία Πετρούπολη " ΣΤΗ Διεύθυνση ) > 0;
Σημειώστε ότι αυτό το απλό ερώτημα για την ανάκτηση δεδομένων μπορεί να διατυπωθεί διαφορετικά:
ΕΠΙΛΟΓΗ * ΑΠΟ Πελάτες
WHERE Διεύθυνση LIKE "%Petersburg%";
ΑΠΟΣΠΑΣΜΑ (ΜΗΝΑΣ ΑΠΟ ΗΜΕΡΟΜΗΝΙΑ "25-10-2005")επιστρέφει 10.
Για παράδειγμα:
CHARACTER_LENGTH ("Γεια σε όλους") επιστρέφει 11.
Το ABS (-123) επιστρέφει 123.
Το ABS (2 - 5) επιστρέφει 3.
Το MOD(5, h) επιστρέφει 2;
Το MOD(2, h) επιστρέφει 0.
Ο FLOOR (5.123) επιστρέφει 5.0.
Το CEIL(5.123) επιστρέφει 6.0.
Το WIDTH_BUCKET(3.14, 0, 9, 5) επιστρέφει 2.
Λειτουργίες ημερομηνίας-ώρας
ΣΕ Γλώσσα SQLΥπάρχουν τρεις λειτουργίες που επιστρέφουν την τρέχουσα ημερομηνία και ώρα.
Για παράδειγμα: 2005-06-18.
12:39:45.27.
Σημειώστε ότι η ημερομηνία και η ώρα που επιστρέφονται από αυτές τις λειτουργίες δεν είναι τύπος χαρακτήρων. Εάν πρέπει να τις αναπαραστήσετε ως συμβολοσειρές χαρακτήρων, τότε θα πρέπει να χρησιμοποιήσετε τη συνάρτηση μετατροπής τύπου CAST() για αυτό.
Οι συναρτήσεις ημερομηνίας-ώρας χρησιμοποιούνται συνήθως σε ερωτήματα για την εισαγωγή, ενημέρωση και διαγραφή δεδομένων. Για παράδειγμα, όταν καταγράφετε πληροφορίες πωλήσεων, εισάγετε τρέχουσα ημερομηνίακαι του χρόνου. Αφού συνοψιστούν τα αποτελέσματα για ένα μήνα ή τρίμηνο, τα δεδομένα πωλήσεων για την περίοδο αναφοράς μπορούν να διαγραφούν.
Υπολογιζόμενες εκφράσεις
Οι υπολογισμένες εκφράσεις δημιουργούνται από σταθερές (αριθμητικές, συμβολοσειρές, λογικές), συναρτήσεις, ονόματα πεδίων και άλλους τύπους δεδομένων συνδέοντάς τα με αριθμητικές, συμβολοσειρές, λογικούς και άλλους τελεστές. Με τη σειρά τους, οι εκφράσεις μπορούν να συνδυαστούν χρησιμοποιώντας τελεστές σε πιο σύνθετες (σύνθετες) εκφράσεις. Οι παρενθέσεις χρησιμοποιούνται για τον έλεγχο της σειράς με την οποία αξιολογούνται οι εκφράσεις.
Λογικοί τελεστέςΚΑΙ, Ή και ΟΧΙ και λειτουργίες έχουν συζητηθεί προηγουμένως.
Αριθμητικοί τελεστές:
Χειριστής συμβολοσειράςμόνο ένας τελεστής συνένωσης ή συμβολοσειράς (| |). Ορισμένες υλοποιήσεις της SQL (όπως η Microsoft Access) χρησιμοποιούν τον χαρακτήρα (+) αντί για (| |). Ο τελεστής συνένωσης προσθέτει τη δεύτερη συμβολοσειρά στο τέλος του πρώτου παραδείγματος, την έκφραση:
"Σάσα" | | «αγαπά» | | "Κουνώντας"
θα επιστρέψει τη χορδή "Sasha loves Masha" ως αποτέλεσμα.
Κατά τη σύνθεση παραστάσεων, πρέπει να βεβαιωθείτε ότι οι τελεστές των τελεστών είναι έγκυρων τύπων. Για παράδειγμα, η έκφραση: 123 + "Sasha" δεν είναι έγκυρη επειδή ο τελεστής αριθμητικής πρόσθεσης εφαρμόζεται σε έναν τελεστή συμβολοσειράς.
Οι υπολογισμένες εκφράσεις μπορεί να εμφανιστούν μετά Δήλωση SELECT, καθώς και σε εκφράσεις συνθήκης δηλώσεων WHERE και HAVIΝ.Γ.
Ας δούμε μερικά παραδείγματα.
Αφήστε τον πίνακα πωλήσεων να περιέχει τις στήλες ProductType, Quantity και Price, και θέλουμε να γνωρίζουμε τα έσοδα για κάθε τύπο προϊόντος. Για να το κάνετε αυτό, απλώς συμπεριλάβετε την έκφραση Quantity*Price στη λίστα των στηλών μετά τη δήλωση SELECT:
SELECT Product_type, Quantity, Price, Quantity*PriceΩΣ
Σύνολο πωλήσεων ΑΠΟ?
Αυτό χρησιμοποιεί τη λέξη-κλειδί AS (ως) για να καθορίσει ένα ψευδώνυμο για τη στήλη υπολογισμένων δεδομένων.
Στο Σχ. Το Σχήμα 10 δείχνει τον αρχικό πίνακα πωλήσεων και τον πίνακα αποτελεσμάτων ερωτήματος.
Ρύζι. 10. Αποτέλεσμα της ερώτησης με υπολογισμό εσόδων για κάθε είδος προϊόντος
Εάν θέλετε να μάθετε τα συνολικά έσοδα από την πώληση όλων των αγαθών, χρησιμοποιήστε απλώς το ακόλουθο ερώτημα:
ΕΠΙΛΟΓΗ ΣΥΝΘΕΣΗΣ (Ποσότητα*Τιμή) ΑΠΟ Πωλήσεις;
Το ακόλουθο ερώτημα περιέχει υπολογισμένες εκφράσεις τόσο στη λίστα στηλών όσο και στη συνθήκη του όρου WHERE. Επιλέγει από τον πίνακα πωλήσεων εκείνα τα προϊόντα των οποίων τα έσοδα από πωλήσεις είναι περισσότερα από 1000:
SELECT Product_type, Quantity*Price AS Total
ΑΠΟ Πωλήσεις
ΠΟΥ Ποσότητα*Τιμή > 1000;
Ας υποθέσουμε ότι θέλετε να πάρετε έναν πίνακα που έχει δύο στήλες:
Προϊόν που περιέχει τον τύπο και την τιμή του προϊόντος.
Σύνολο που περιέχει έσοδα.
Δεδομένου ότι στον αρχικό πίνακα πωλήσεων θεωρείται ότι η στήλη Product_Type είναι χαρακτήρας (τύπος CHAR) και η στήλη Τιμή είναι αριθμητική, κατά τη συγχώνευση (κόλληση) δεδομένων από αυτές τις στήλες, είναι απαραίτητο να μεταφέρετε τον αριθμητικό τύπο σε έναν τύπο χαρακτήρων χρησιμοποιώντας το Συνάρτηση CAST(). Το ερώτημα που εκτελεί αυτήν την εργασία μοιάζει με αυτό (Εικ. 11):
ΕΠΙΛΟΓΗ_Τύπος προϊόντος | | " (Τιμή: " | | CAST(Τιμή AS CHAR(5)) | | ")" AS Προϊόν, Ποσότητα*Τιμή AS Σύνολο
ΑΠΟ Πωλήσεις?
Ρύζι. 11. Αποτέλεσμα ερωτήματος που συνδυάζει διαφορετικούς τύπους δεδομένων σε μία στήλη
Σημείωμα. Στη Microsoft Access, ένα παρόμοιο ερώτημα θα μοιάζει με αυτό:
SELECT Product_Type + " (Τιμή: " + C Str (Τιμή) + ")" AS είδος,
Ποσότητα*Τιμή AS Σύνολο
ΑΠΟ Πωλήσεις?
Εκφράσεις υπό όρους με δήλωση ΠΕΡΙΠΤΩΣΗΣ
Οι συμβατικές γλώσσες προγραμματισμού έχουν τελεστές άλματος υπό όρους που σας επιτρέπουν να ελέγχετε την υπολογιστική διαδικασία ανάλογα με το αν κάποια συνθήκη είναι αληθής ή όχι. Στην SQL, αυτός ο τελεστής είναι CASE (περίπτωση, περίσταση, περίπτωση). Στο SQL:2003, αυτός ο τελεστής επιστρέφει μια τιμή και επομένως μπορεί να χρησιμοποιηθεί σε εκφράσεις. Έχει δύο κύριες μορφές, τις οποίες θα εξετάσουμε σε αυτή την ενότητα.
Δήλωση CASE με τιμές
Η δήλωση CASE με τιμές έχει την ακόλουθη σύνταξη:
CASE checked_value
ΟΤΑΝ τιμή1 ΤΟΤΕ αποτέλεσμα1
ΟΤΑΝ τιμή 2 ΤΟΤΕ αποτέλεσμα2
. . .
ΟΤΑΝ η τιμή του N ΤΟΤΕ το αποτέλεσμα του N
ΑΛΛΟ αποτέλεσμαΧ
Σε περίπτωση checked_valueισούται με τιμή 1 , η δήλωση CASE επιστρέφει την τιμήαποτέλεσμα 1 , υποδεικνύεται μετά λέξη-κλειδίΜΕΤΑ (αυτό). Διαφορετικά, η τιμή checked_value συγκρίνεται μετιμή 2 , και αν είναι ίσα, τότε επιστρέφεται η τιμή result2. Διαφορετικά, η τιμή που ελέγχεται συγκρίνεται με την επόμενη τιμή που καθορίζεται μετά τη λέξη-κλειδί WHEN, κ.λπ. Εάν η τιμή tested_value δεν είναι ίση με καμία από αυτές τις τιμές, τότε η τιμή επιστρέφεταιαποτέλεσμα Χ , που καθορίζεται μετά τη λέξη-κλειδί ELSE (άλλο).
Η λέξη-κλειδί ELSE είναι προαιρετική. Εάν λείπει και καμία από τις τιμές που συγκρίνονται δεν είναι ίση με την τιμή που ελέγχεται, τότε η δήλωση CASE επιστρέφει NULL.
Ας πούμε, με βάση τον πίνακα Πελάτες (βλ. Εικ. 1), θέλετε να λάβετε έναν πίνακα στον οποίο τα ονόματα των περιοχών αντικαθίστανται από τους κωδικούς τους αριθμούς. Εάν δεν υπάρχουν πάρα πολλές διαφορετικές περιοχές στον πίνακα προέλευσης, τότε για να λύσετε αυτό το πρόβλημα είναι βολικό να χρησιμοποιήσετε ένα ερώτημα με τον τελεστή CASE:
ΕΠΙΛΟΓΗ Όνομα, Διεύθυνση,
ΠΕΡΙΠΤΩΣΗ Περιφέρεια
ΟΤΑΝ "Μόσχα" ΤΟΤΕ "77"
ΟΤΑΝ "Τβερ περιοχή" ΤΟΤΕ "69"
. . .
Περιφέρεια ΑΛΛΟΥ
AS κωδικός περιοχής
ΑΠΟ Πελάτες?
Δήλωση CASE με συνθήκες αναζήτησης
Η δεύτερη μορφή του τελεστή CASE περιλαμβάνει τη χρήση του κατά την αναζήτηση ενός πίνακα για εκείνες τις εγγραφές που ικανοποιούν μια συγκεκριμένη συνθήκη:
ΠΕΡΙΠΤΩΣΗ
ΟΤΑΝ συνθήκη 1 ΤΟΤΕ αποτέλεσμα1
ΟΤΑΝ πιάσει2 ΤΟΤΕ αποτέλεσμα2
. . .
ΟΤΑΝ συνθήκη Ν ΤΟΤΕ αποτέλεσμα Ν
ΑΛΛΟ αποτέλεσμαΧ
Η πρόταση CASE ελέγχει εάν η συνθήκη 1 είναι αληθής για την πρώτη εγγραφή στο σύνολο που καθορίζεται από τον όρο WHERE ή ολόκληρο τον πίνακα εάν δεν υπάρχει WHERE. Εάν ναι, τότε το CASE επιστρέφει το αποτέλεσμα1. Διαφορετικά, η συνθήκη 2 ελέγχεται για αυτήν την εγγραφή. Εάν είναι αληθές, τότε επιστρέφεται η τιμή result2 κ.λπ. Εάν καμία από τις συνθήκες δεν είναι αληθής, τότε επιστρέφεται το αποτέλεσμα της τιμήςΧ , που καθορίζεται μετά τη λέξη-κλειδί ELSE.
Η λέξη-κλειδί ELSE είναι προαιρετική. Εάν λείπει και καμία από τις συνθήκες δεν είναι αληθής, η πρόταση CASE περιστρέφεται NULL. Αφού εκτελεστεί η πρόταση που περιέχει CASE για την πρώτη εγγραφή, περνά στην επόμενη εγγραφή. Αυτό συνεχίζεται έως ότου ολοκληρωθεί η επεξεργασία του συνόλου των εγγραφών.
Ας υποθέσουμε ότι σε έναν πίνακα βιβλίων (Τίτλος, Τιμή), μια στήλη είναι NULL εάν το αντίστοιχο βιβλίο είναι εκτός αποθέματος. Το ακόλουθο ερώτημα επιστρέφει έναν πίνακα που εμφανίζει "Εκτός αποθέματος" αντί για NULL:
ΕΠΙΛΟΓΗ Τίτλου,
ΠΕΡΙΠΤΩΣΗ
ΟΤΑΝ Η τιμή ΕΙΝΑΙ ΜΗΧΑΝΗ ΤΟΤΕ "Εκτός αποθέματος"
ΑΛΛΟ ΚΑΣΤ (Τιμή ΩΣ CHAR(8))
AS Τιμή
ΑΠΟ Βιβλία?
Όλες οι τιμές στην ίδια στήλη πρέπει να είναι του ίδιου τύπου. Επομένως σε αυτό το αίτημαχρησιμοποιεί τη συνάρτηση μετατροπής τύπου CAST για μετάδοση αριθμητικές τιμέςστήλη Τιμή σε τύπο χαρακτήρα.
Σημειώστε ότι μπορείτε πάντα να χρησιμοποιήσετε τη δεύτερη μορφή της δήλωσης CASE αντί της πρώτης:
ΠΕΡΙΠΤΩΣΗ
ΟΤΑΝ tested_value = value1 ΤΟΤΕ αποτέλεσμα1
ΟΤΑΝ tested_value = value2 ΤΟΤΕ αποτέλεσμα2
. . .
WHEN checked_value = τιμήΝ ΜΕΤΑ αποτέλεσμαΝ
ΑΛΛΟ αποτέλεσμα
Συναρτήσεις NULLIF και COALESCE
Σε ορισμένες περιπτώσεις, ειδικά σε αιτήματα ενημέρωσης δεδομένων (τελεστής UPDATE), είναι βολικό να χρησιμοποιείτε τις πιο συμπαγείς συναρτήσεις NULLIF() (NULL if) και COALESCE() (combine) αντί του δυσκίνητου τελεστή CASE.
Συνάρτηση NULLIF ( τιμή 1, τιμή 2) επιστρέφει NULL εάν η τιμή της πρώτης παραμέτρου ταιριάζει με την τιμή της δεύτερης παραμέτρου, σε περίπτωση αναντιστοιχίας, η τιμή της πρώτης παραμέτρου επιστρέφεται αμετάβλητη. Δηλαδή, εάν η τιμή ισότητας1 = τιμή2 είναι αληθής, τότε η συνάρτηση επιστρέφει NULL, διαφορετικά την τιμή τιμή1.
Αυτή η λειτουργίαείναι ισοδύναμη με τη δήλωση CASE στις ακόλουθες δύο μορφές:
ΟΤΑΝ τιμή 2 ΤΟΤΕ ΜΗΧΑΝΟ
ΑΛΛΟ τιμή 1
ΟΤΑΝ τιμή 1 = τιμή 2 ΤΟΤΕ ΜΗΧΑΝΟ
ΑΛΛΟ τιμή 1
Συνάρτηση COALESCE( τιμή 1, τιμή 2, ...,τιμή N) δέχεται μια λίστα τιμών, η οποία μπορεί να είναι είτε καθορισμένη είτε μηδενική. Η συνάρτηση επιστρέφει μια καθορισμένη τιμή από μια λίστα ή NULL εάν όλες οι τιμές δεν έχουν καθοριστεί.
Αυτή η συνάρτηση είναι ισοδύναμη με την ακόλουθη δήλωση CASE:
ΠΕΡΙΠΤΩΣΗ
ΟΤΑΝ η τιμή 1 ΔΕΝ ΕΙΝΑΙ ΜΗΧΑΝΗ ΤΟΤΕ η τιμή 1
ΟΤΑΝ η τιμή 2 ΔΕΝ ΕΙΝΑΙ ΜΗΧΑΝΗ ΤΟΤΕ η τιμή 2
. . .
ΟΤΑΝ η τιμή N ΔΕΝ ΕΙΝΑΙ ΜΗΧΑΝΗ ΤΟΤΕ η τιμή N
ΑΛΛΟ ΜΗΧΑΝΟ
Ας υποθέσουμε ότι στον πίνακα Βιβλία (Τίτλος, Τιμή), η στήλη Τιμή είναι NULL εάν το αντίστοιχο βιβλίο είναι εκτός αποθέματος. Το ακόλουθο ερώτημα επιστρέφει έναν πίνακα όπου αντί γιαΑΚΥΡΟΣ Εμφανίζεται το κείμενο "Εξαντλήθηκε":
SELECT Όνομα, COALESCE (CAST(Τιμή ΩΣ CHAR(8)),
"Εκτός αποθέματος") AS Τιμή
ΑΠΟ Βιβλία?
Σε αυτό το σεμινάριο θα μάθετε πώς να το χρησιμοποιείτε Συνάρτηση 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 δεν χρειάζεται να είναι ένα μόνο πεδίο. Μπορείτε επίσης να χρησιμοποιήσετε τον τύπο. Για παράδειγμα, μπορείτε να υπολογίσετε τη συνολική προμήθεια.
Transact-SQL
ΕΠΙΛΕΞΤΕ ΠΟΣΟ (πωλήσεις * 0,03) ΩΣ "Συνολική προμήθεια" ΑΠΟ παραγγελίες.
SELECT SUM (πωλήσεις * 0,03 ) ΩΣ "Συνολική προμήθεια" ΑΠΟ παραγγελίες? |
Σε ορισμένες περιπτώσεις, θα χρειαστεί να χρησιμοποιήσετε τον τελεστή GROUP BY με τη συνάρτηση SUM.
SELECT MIN(τιμή), MAX(τιμή), AVG(τιμή) FROM τιμές.
Τώρα, θέλουμε να μάθουμε πόσο μας έφερε τα εμπορεύματα από τον προμηθευτή "House of Printing" (id=2). Το να κάνεις ένα τέτοιο αίτημα δεν είναι τόσο εύκολο. Ας σκεφτούμε πώς να το συνθέσουμε:
1. Αρχικά, από τον πίνακα Προμήθειες (εισερχόμενα), επιλέξτε τα αναγνωριστικά (id_incoming) εκείνων των παραδόσεων που πραγματοποιήθηκαν από τον προμηθευτή "Εκτυπωτήριο" (id=2):
2. Τώρα από τον πίνακα Supply Journal (magazine_incoming) πρέπει να επιλέξετε τα εμπορεύματα (id_product) και τις ποσότητες τους (ποσότητα), που πραγματοποιήθηκαν στις παραδόσεις που βρέθηκαν στο σημείο 1. Δηλαδή, το ερώτημα από το σημείο 1 γίνεται ένθετο:
3. Τώρα πρέπει να προσθέσουμε στον πίνακα που προκύπτει τις τιμές για τα προϊόντα που βρέθηκαν, οι οποίες αποθηκεύονται στον πίνακα Τιμές. Δηλαδή, θα χρειαστεί να συμμετάσχουμε στους πίνακες Supply Magazine (magazine_incoming) και Prices χρησιμοποιώντας τη στήλη id_product:
4. Στον πίνακα που προκύπτει λείπει σαφώς η στήλη Amount, δηλαδή υπολογιζόμενη στήλη. Η δυνατότητα δημιουργίας τέτοιων στηλών παρέχεται στη MySQL. Για να το κάνετε αυτό, απλά πρέπει να καθορίσετε στο ερώτημα το όνομα της υπολογιζόμενης στήλης και τι πρέπει να υπολογίζει. Στο παράδειγμά μας, μια τέτοια στήλη θα ονομάζεται άθροισμα και θα υπολογίζει το γινόμενο των στηλών ποσότητας και τιμής. Το όνομα της νέας στήλης διαχωρίζεται με τη λέξη AS:
Επιλέξτε Magazine_Incoming.id_product, Magazine_incoming.quantity, τιμές.price, magazine_incoming.quantity*τιμές.
5. Ωραία, το μόνο που έχουμε να κάνουμε είναι να προσθέσουμε τη στήλη άθροισης και τελικά να μάθουμε πόσο μας έφερε τα αγαθά ο προμηθευτής "House of Printing". Η σύνταξη για τη χρήση της συνάρτησης SUM() είναι η εξής:
SELECT SUM(column_name) FROM table_name;
Γνωρίζουμε το όνομα της στήλης - summa, αλλά δεν έχουμε το όνομα του πίνακα, αφού είναι αποτέλεσμα ερωτήματος. Τι να κάνουμε; Για τέτοιες περιπτώσεις, η MySQL έχει Προβολές. Μια προβολή είναι ένα ερώτημα επιλογής στο οποίο δίνεται ένα μοναδικό όνομα και μπορεί να αποθηκευτεί σε μια βάση δεδομένων για μελλοντική χρήση.
Η σύνταξη για τη δημιουργία μιας προβολής είναι η εξής:
CREATE VIEW view_name AS αίτημα
Ας αποθηκεύσουμε το αίτημά μας ως αναλυτική προβολή με το όνομα report_vendor:
ΔΗΜΙΟΥΡΓΗΣΤΕ ΠΡΟΒΟΛΗ report_vendor 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_comiding=SELECT_incoming WHERE id_vendor=2 )
6. Τώρα μπορείτε να χρησιμοποιήσετε την τελική συνάρτηση SUM():
SELECT SUM(summa) FROM report_vendor;
Έτσι πετύχαμε το αποτέλεσμα, αν και για αυτό έπρεπε να χρησιμοποιήσουμε ένθετα ερωτήματα, συνδέσεις, υπολογισμένες στήλες και προβολές. Ναι, μερικές φορές πρέπει να σκεφτείς για να έχεις αποτέλεσμα, χωρίς αυτό δεν μπορείς να φτάσεις πουθενά. Αλλά θίξαμε δύο πολύ σημαντικά θέματα - υπολογισμένες στήλες και προβολές. Ας μιλήσουμε για αυτούς με περισσότερες λεπτομέρειες.
ΕΠΙΛΟΓΗ_όνομα_στήλης 1, όνομα_στήλης 2, όνομα_στήλης 1 * όνομα_στήλης 2 ΩΣ υπολογισμένο_όνομα_στήλης ΑΠΟ το όνομα_του πίνακα;
Η δεύτερη απόχρωση είναι η λέξη-κλειδί 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. Επομένως, δεν πρέπει να τα καταχραστείτε.
Ας μάθουμε να συνοψίζουμε. Όχι, αυτά δεν είναι τα αποτελέσματα της μελέτης της SQL, αλλά τα αποτελέσματα των τιμών των στηλών των πινάκων της βάσης δεδομένων. Σύνολο Συναρτήσεις SQLενεργήστε στις τιμές της στήλης για να δημιουργήσετε μια ενιαία τιμή που προκύπτει. Οι πιο συχνά χρησιμοποιούμενες συναρτήσεις συγκεντρωτικών SQL είναι SUM, MIN, MAX, AVG και COUNT. Είναι απαραίτητο να γίνει διάκριση μεταξύ δύο περιπτώσεων χρήσης συγκεντρωτικών συναρτήσεων. Πρώτον, οι αθροιστικές συναρτήσεις χρησιμοποιούνται μόνες τους και επιστρέφουν μία μόνο τιμή που προκύπτει. Δεύτερον, οι συγκεντρωτικές συναρτήσεις χρησιμοποιούνται με τον όρο SQL GROUP BY, δηλαδή ομαδοποίηση κατά πεδία (στήλες) για να ληφθούν οι προκύπτουσες τιμές σε κάθε ομάδα. Ας εξετάσουμε πρώτα περιπτώσεις χρήσης συγκεντρωτικών συναρτήσεων χωρίς ομαδοποίηση.
Η συνάρτηση SQL SUM επιστρέφει το άθροισμα των τιμών σε μια στήλη πίνακα βάσης δεδομένων. Μπορεί να εφαρμοστεί μόνο σε στήλες των οποίων οι τιμές είναι αριθμοί. Τα ερωτήματα SQL για τη λήψη του αθροίσματος που προκύπτει ξεκινούν ως εξής:
ΕΠΙΛΕΞΤΕ ΣΥΝΟΛΟ (COLUMN_NAME) ...
Αυτή η έκφραση ακολουθείται από FROM (TABLE_NAME) και στη συνέχεια μπορεί να καθοριστεί μια συνθήκη χρησιμοποιώντας τον όρο WHERE. Επιπλέον, το όνομα της στήλης μπορεί να προηγείται από DISTINCT, που σημαίνει ότι θα μετρώνται μόνο οι μοναδικές τιμές. Από προεπιλογή, λαμβάνονται υπόψη όλες οι τιμές (για αυτό μπορείτε να καθορίσετε συγκεκριμένα όχι DISTINCT, αλλά ALL, αλλά η λέξη ALL δεν απαιτείται).
Εάν θέλετε να εκτελέσετε ερωτήματα βάσης δεδομένων από αυτό το μάθημα στον MS SQL Server, αλλά αυτό το DBMS δεν είναι εγκατεστημένο στον υπολογιστή σας, τότε μπορείτε να το εγκαταστήσετε χρησιμοποιώντας τις οδηγίες σε αυτόν τον σύνδεσμο .
Πρώτα θα εργαστούμε με τη βάση δεδομένων της εταιρείας - Company1. Το σενάριο για τη δημιουργία αυτής της βάσης δεδομένων, των πινάκων της και της πλήρωσης των πινάκων με δεδομένα βρίσκεται στο αρχείο σε αυτόν τον σύνδεσμο .
Παράδειγμα 1.Υπάρχει μια βάση δεδομένων της εταιρείας με δεδομένα για τα τμήματα και τους υπαλλήλους της. Ο πίνακας Προσωπικού έχει επίσης μια στήλη με στοιχεία για τους μισθούς των εργαζομένων. Η επιλογή από τον πίνακα μοιάζει με αυτό (για να μεγεθύνετε την εικόνα, κάντε κλικ πάνω της με το αριστερό κουμπί του ποντικιού):
Για να λάβουμε το άθροισμα όλων των μισθών, χρησιμοποιούμε το ακόλουθο ερώτημα (στον MS SQL Server - με την προηγούμενη κατασκευή USE company1;):
ΕΠΙΛΕΞΤΕ ΠΟΣΟ (Μισθός) ΑΠΟ Προσωπικό
Αυτό το ερώτημα θα επιστρέψει την τιμή 287664,63.
Και τώρα. Στις ασκήσεις αρχίζουμε ήδη να περιπλέκουμε τις εργασίες, φέρνοντάς τις πιο κοντά σε αυτές που συναντάμε στην πράξη.
Η συνάρτηση SQL MIN λειτουργεί επίσης σε στήλες των οποίων οι τιμές είναι αριθμοί και επιστρέφει το ελάχιστο όλων των τιμών στη στήλη. Αυτή η συνάρτηση έχει σύνταξη παρόμοια με αυτή της συνάρτησης SUM.
Παράδειγμα 3.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στο παράδειγμα 1.
Πρέπει να μάθουμε τον κατώτατο μισθό για τους υπαλλήλους του τμήματος με αριθμό 42. Για να το κάνετε αυτό, γράψτε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE company1;):
Το ερώτημα θα επιστρέψει την τιμή 10505,90.
Και πάλι άσκηση για ανεξάρτητη απόφαση . Σε αυτήν και σε ορισμένες άλλες ασκήσεις, θα χρειαστείτε όχι μόνο τον πίνακα Staff, αλλά και τον πίνακα Org, που περιέχει δεδομένα σχετικά με τα τμήματα της εταιρείας:
Παράδειγμα 4.Ο πίνακας Org προστίθεται στον πίνακα Staff, που περιέχει δεδομένα για τα τμήματα της εταιρείας. Εκτυπώστε τον ελάχιστο αριθμό ετών που εργάστηκε από έναν υπάλληλο σε ένα τμήμα που βρίσκεται στη Βοστώνη.
Η συνάρτηση SQL MAX λειτουργεί παρόμοια και έχει παρόμοια σύνταξη, η οποία χρησιμοποιείται όταν πρέπει να προσδιορίσετε τη μέγιστη τιμή μεταξύ όλων των τιμών σε μια στήλη.
Παράδειγμα 5.
Πρέπει να μάθουμε τον μέγιστο μισθό των υπαλλήλων στον αριθμό τμήματος 42. Για να το κάνετε αυτό, γράψτε το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE company1;):
Το ερώτημα θα επιστρέψει την τιμή 18352,80
Ήρθε η ώρα ασκήσεις για ανεξάρτητη λύση.
Παράδειγμα 6.Δουλεύουμε και πάλι με δύο τραπέζια - Προσωπικό και Οργαν. Εμφανίστε το όνομα του τμήματος και τη μέγιστη αξία της προμήθειας που έλαβε ένας υπάλληλος στο τμήμα που ανήκει στην ομάδα τμημάτων (Division) Eastern. Χρήση JOIN (σύνδεση τραπεζιών) .
Αυτό που αναφέρεται σχετικά με τη σύνταξη για τις προηγούμενες συναρτήσεις που περιγράφηκαν ισχύουν και για τη συνάρτηση SQL AVG. Αυτή η συνάρτηση επιστρέφει τον μέσο όρο όλων των τιμών σε μια στήλη.
Παράδειγμα 7.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.
Ας υποθέσουμε ότι θέλετε να μάθετε τη μέση προϋπηρεσία των υπαλλήλων στο τμήμα 42. Για να το κάνετε αυτό, γράψτε το ακόλουθο ερώτημα (στον MS SQL Server - με την προηγούμενη κατασκευή USE company1;):
Το αποτέλεσμα θα είναι 6,33
Παράδειγμα 8.Δουλεύουμε με ένα τραπέζι - Προσωπικό. Εμφάνιση του μέσου μισθού των εργαζομένων με 4 έως 6 χρόνια εμπειρίας.
Η συνάρτηση SQL COUNT επιστρέφει τον αριθμό των εγγραφών σε έναν πίνακα βάσης δεδομένων. Εάν καθορίσετε SELECT COUNT(COLUMN_NAME) ... στο ερώτημα, το αποτέλεσμα θα είναι ο αριθμός των εγγραφών χωρίς να ληφθούν υπόψη εκείνες οι εγγραφές στις οποίες η τιμή της στήλης είναι NULL (μη καθορισμένη). Αν χρησιμοποιήσετε έναν αστερίσκο ως επιχείρημα και ξεκινήστε ΕΠΙΛΟΓΗ ερωτήματος COUNT(*) ..., τότε το αποτέλεσμα θα είναι ο αριθμός όλων των εγγραφών (σειρών) του πίνακα.
Παράδειγμα 9.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.
Θέλετε να μάθετε τον αριθμό όλων των υπαλλήλων που λαμβάνουν προμήθειες. Ο αριθμός των υπαλλήλων των οποίων οι τιμές στηλών Comm δεν είναι NULL θα επιστραφεί με το ακόλουθο ερώτημα (στον MS SQL Server - με το πρόθεμα USE company1;):
SELECT COUNT (Comm) FROM Staff
Το αποτέλεσμα θα είναι 11.
Παράδειγμα 10.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.
Εάν πρέπει να μάθετε τον συνολικό αριθμό εγγραφών στον πίνακα, χρησιμοποιήστε ένα ερώτημα με έναν αστερίσκο ως όρισμα στη συνάρτηση COUNT (στον MS SQL Server - με την προηγούμενη κατασκευή USE company1;):
ΕΠΙΛΕΞΤΕ ΑΡΙΘΜΟ (*) ΑΠΟ Προσωπικό
Το αποτέλεσμα θα είναι 17.
Στο επόμενο άσκηση για ανεξάρτητη λύσηθα χρειαστεί να χρησιμοποιήσετε ένα δευτερεύον ερώτημα.
Παράδειγμα 11.Δουλεύουμε με ένα τραπέζι - Προσωπικό. Εμφάνιση του αριθμού των εργαζομένων στο τμήμα προγραμματισμού (Plains).
Ας δούμε τώρα τη χρήση συναρτήσεων συγκεντρωτικών συναρτήσεων μαζί με την πρόταση SQL GROUP BY. Η πρόταση SQL GROUP BY χρησιμοποιείται για την ομαδοποίηση των τιμών των αποτελεσμάτων κατά στήλες σε έναν πίνακα βάσης δεδομένων. Η ιστοσελίδα έχει ένα μάθημα αφιερωμένο ξεχωριστά σε αυτόν τον χειριστή .
Θα εργαστούμε με τη βάση δεδομένων "Ads Portal 1". Το σενάριο για τη δημιουργία αυτής της βάσης δεδομένων, τον πίνακά της και τη συμπλήρωση του πίνακα δεδομένων βρίσκεται στο αρχείο σε αυτόν τον σύνδεσμο .
Παράδειγμα 12.Έτσι, υπάρχει μια βάση δεδομένων της πύλης διαφημίσεων. Διαθέτει έναν πίνακα διαφημίσεων που περιέχει δεδομένα σχετικά με τις διαφημίσεις που υποβλήθηκαν για την εβδομάδα. Η στήλη Κατηγορία περιέχει δεδομένα σχετικά με μεγάλες κατηγορίες διαφημίσεων (για παράδειγμα, Real Estate) και η στήλη Ανταλλακτικά περιέχει δεδομένα σχετικά με μικρότερα τμήματα που περιλαμβάνονται στις κατηγορίες (για παράδειγμα, τα τμήματα Διαμερίσματα και εξοχικά σπίτια είναι τμήματα της κατηγορίας Real Estate). Η στήλη Μονάδες περιέχει δεδομένα για τον αριθμό των διαφημίσεων που υποβλήθηκαν και η στήλη Χρήματα περιέχει δεδομένα σχετικά με το χρηματικό ποσό που ελήφθη για την υποβολή διαφημίσεων.
Κατηγορία | Μέρος | Μονάδες | Χρήματα |
Μεταφορά | Αυτοκίνητα | 110 | 17600 |
Ακίνητα | Διαμερίσματα | 89 | 18690 |
Ακίνητα | Ντάχας | 57 | 11970 |
Μεταφορά | Μοτοσικλέτες | 131 | 20960 |
Υλικά κατασκευής | σανίδες | 68 | 7140 |
Ηλεκτρολόγος Μηχανικός | τηλεοράσεις | 127 | 8255 |
Ηλεκτρολόγος Μηχανικός | Ψυγεία | 137 | 8905 |
Υλικά κατασκευής | Regips | 112 | 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