Sql sum με συνθήκη. Υπολογισμοί σε sql

06.04.2023

ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΗ

Συνοπτικές συναρτήσεις

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

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

  • COUNT (παράμετρος ) επιστρέφει τον αριθμό των εγγραφών που καθορίζονται στην παράμετρο. Εάν θέλετε να λάβετε τον αριθμό όλων των εγγραφών, θα πρέπει να καθορίσετε τον αστερίσκο (*) ως παράμετρο. Εάν καθορίσετε ένα όνομα στήλης ως παράμετρο, η συνάρτηση θα επιστρέψει τον αριθμό των εγγραφών στις οποίες αυτή η στήλη έχει τιμές διαφορετικές από NULL. Για να μάθετε πόσες διαφορετικές τιμές περιέχει μια στήλη, προηγηθείτε του ονόματος της στήλης με τη λέξη-κλειδί DISTINCT. Για παράδειγμα:

SELECT COUNT(*) FROM Clients.

SELECT COUNT(Order_Amount) ΑΠΟ Πελάτες.

ΕΠΙΛΕΞΤΕ ΑΡΙΘΜΟ (ΔΙΑΚΡΙΤΗ_Ποσό Παραγγελίας) ΑΠΟ Πελάτες.

Προσπαθώντας να εκτελέσετε το ακόλουθο ερώτημα θα οδηγήσει σε ένα μήνυμα σφάλματος:

SELECT Region , COUNT(*) FROM Clients ;

  • SUM (παράμετρος ) επιστρέφει το άθροισμα των τιμών της στήλης που καθορίζονται στην παράμετρο. Η παράμετρος μπορεί επίσης να είναι μια παράσταση που περιέχει το όνομα της στήλης. Για παράδειγμα:

ΕΠΙΛΟΓΗ ΣΥΝΘΕΣΗΣ (Ποσό_Παραγγελίας) ΑΠΟ Πελάτες.

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

Ας υποθέσουμε ότι στον πίνακα πηγής οι τιμές της στήλης Order_Amount εκφράζονται σε ρούβλια και πρέπει να υπολογίσουμε το συνολικό ποσό σε δολάρια. Εάν η τρέχουσα συναλλαγματική ισοτιμία είναι, για παράδειγμα, 27,8, τότε μπορείτε να λάβετε το απαιτούμενο αποτέλεσμα χρησιμοποιώντας την έκφραση:

ΕΠΙΛΟΓΗ ΣΥΝΘΕΣΗΣ (Ποσό_παραγγελίας*27,8) ΑΠΟ Πελάτες.

  • AVG (παράμετρος ) επιστρέφει τον αριθμητικό μέσο όρο όλων των τιμών της στήλης που καθορίζονται στην παράμετρο. Η παράμετρος μπορεί να είναι μια παράσταση που περιέχει το όνομα της στήλης. Για παράδειγμα:

SELECT AVG (Order_Amount) ΑΠΟ Πελάτες.

ΕΠΙΛΟΓΗ AVG (Order_Amount*27,8) FROM Clients

ΠΟΥ Περιφέρεια<>"North_3west";

  • MAX (παράμετρος ) επιστρέφει τη μέγιστη τιμή στη στήλη που καθορίζεται στην παράμετρο. Η παράμετρος μπορεί επίσης να είναι μια παράσταση που περιέχει το όνομα της στήλης. Για παράδειγμα:

SELECT MAX(Order_Amount) FROM Clients.

SELECT MAX(Order_Amount*27,8) FROM Clients

ΟΠΟΥ Περιοχή<>"North_3west";

  • MIN (παράμετρος ) επιστρέφει την ελάχιστη τιμή στη στήλη που καθορίζεται στην παράμετρο. Η παράμετρος μπορεί να είναι μια παράσταση που περιέχει το όνομα της στήλης. Για παράδειγμα:

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 μετά την επεξεργασία της.

  • ΥΠΟΤΡΟΠΗ (γραμμή ΑΠΟ αρχή)επιστρέφει μια υποσυμβολοσειρά που προκύπτει από τη συμβολοσειρά που έχει καθοριστεί ως παράμετροςγραμμή . Υποσυμβολοσειρά ξεκινά με τον χαρακτήρα του οποίου ο σειριακός αριθμός καθορίζεται στην παράμετρο έναρξης και έχει το μήκος που καθορίζεται στην παράμετρο μήκος. Οι χαρακτήρες σε μια γραμμή αριθμούνται από αριστερά προς τα δεξιά, ξεκινώντας από το 1. Οι τετράγωνες αγκύλες εδώ υποδηλώνουν μόνο ότι η έκφραση που περικλείεται σε αυτές είναι προαιρετική. Αν η έκφρασηΓΙΑ μήκος δεν χρησιμοποιείται, τότε μια υποσυμβολοσειρά απόαρχή και μέχρι το τέλος της αρχικής γραμμής. Τιμές παραμέτρωνέναρξη και μήκος πρέπει να επιλεγεί έτσι ώστε η υποσυμβολοσειρά που αναζητήθηκε να βρίσκεται στην πραγματικότητα μέσα στην αρχική συμβολοσειρά. Διαφορετικά, η συνάρτηση SUBSTRING θα επιστρέψει NULL.

Για παράδειγμα:

SUBSTRING ("Dear Masha!" FROM 9 FOR 4) επιστρέφει "Masha";

SUBSTRING ("Dear Masha!" FROM 9) επιστρέφει "Masha!";

SUBSTRING ("Αγαπητή Μάσα!" ΑΠΟ 15) επιστρέφει NULL.

Μπορείτε να χρησιμοποιήσετε αυτήν τη συνάρτηση σε μια έκφραση SQL, για παράδειγμα, ως εξής:

ΕΠΙΛΟΓΗ * ΑΠΟ Πελάτες

WHERE SUBSTRING (Περιοχή ΑΠΟ 1 ΓΙΑ 5) = "North";

  • UPPER(string ) μετατρέπει όλους τους χαρακτήρες της συμβολοσειράς που καθορίζονται στην παράμετρο σε κεφαλαία.
  • LOWER(string ) μετατρέπει όλους τους χαρακτήρες της συμβολοσειράς που καθορίζονται στην παράμετρο σε πεζούς.
  • TRIM (LEADING | TRAILING | ΚΑΙ ΤΑ ΔΥΟ ["χαρακτήρας"] ΑΠΟ συμβολοσειρά ) αφαιρεί τους αρχικούς (LEADING), τους τελικούς (TRAILING) ή και τους δύο (ΔΥΟ) χαρακτήρες από μια συμβολοσειρά. Από προεπιλογή, ο χαρακτήρας που πρέπει να αφαιρεθεί είναι ένα διάστημα (" "), επομένως μπορεί να παραλειφθεί. Τις περισσότερες φορές, αυτή η λειτουργία χρησιμοποιείται για την αφαίρεση διαστημάτων.

Για παράδειγμα:

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 (απροσδιόριστη τιμή).

  • ΘΕΣΗ ( targetString ΣΕ συμβολοσειρά) αναζητά μια εμφάνιση της συμβολοσειράς προορισμού στην καθορισμένη συμβολοσειρά. Εάν η αναζήτηση είναι επιτυχής, επιστρέφει τον αριθμό θέσης του πρώτου χαρακτήρα της, διαφορετικά 0. Εάν η συμβολοσειρά προορισμού έχει μηδενικό μήκος (για παράδειγμα, η συμβολοσειρά " "), τότε η συνάρτηση επιστρέφει 1. Εάν τουλάχιστον μία από τις παραμέτρους είναι NULL , τότε επιστρέφεται NULL. Οι χαρακτήρες γραμμής αριθμούνται από αριστερά προς τα δεξιά, ξεκινώντας από το 1.

Για παράδειγμα:

POSITION("e" ΣΤΟ "Γεια σε όλους") επιστρέφει 5;

POSITION ("όλοι" ΣΤΟ "Γεια σε όλους") επιστρέφει 8.

POSITION(" "Γεια σε όλους") επιστρέφει 1;

POSITION ("Hello!" IN "Hello all") επιστρέφει 0.

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

ΕΠΙΛΟΓΗ * ΑΠΟ Πελάτες

WHERE POSITION (" Αγία Πετρούπολη " ΣΤΗ Διεύθυνση ) > 0;

Σημειώστε ότι αυτό το απλό ερώτημα για την ανάκτηση δεδομένων μπορεί να διατυπωθεί διαφορετικά:

ΕΠΙΛΟΓΗ * ΑΠΟ Πελάτες

WHERE Διεύθυνση LIKE "%Petersburg%";

  • EXTRACT (παράμετρος ) ανακτά ένα στοιχείο από μια τιμή ημερομηνίας-ώρας ή από ένα διάστημα. Για παράδειγμα:

ΑΠΟΣΠΑΣΜΑ (ΜΗΝΑΣ ΑΠΟ ΗΜΕΡΟΜΗΝΙΑ "25-10-2005")επιστρέφει 10.

  • CHARACTER_LENGTH(συμβολοσειρά ) επιστρέφει τον αριθμό των χαρακτήρων στη συμβολοσειρά.

Για παράδειγμα:

CHARACTER_LENGTH ("Γεια σε όλους") επιστρέφει 11.

  • OCTET_LENGTH(συμβολοσειρά ) επιστρέφει τον αριθμό των οκτάδων (bytes) στη συμβολοσειρά. Κάθε λατινικός ή κυριλλικός χαρακτήρας αντιπροσωπεύεται από ένα byte και ο χαρακτήρας κινεζικού αλφαβήτου αντιπροσωπεύεται από δύο byte.
  • ΚΑΡΔΙΝΑΛΙΚΟΤΗΤΑ (παράμετρος ) παίρνει μια συλλογή στοιχείων ως παράμετρο και επιστρέφει τον αριθμό των στοιχείων στη συλλογή (κωδικός αριθμός). Μια συλλογή μπορεί να είναι, για παράδειγμα, ένας πίνακας ή ένα πολυσύνολο που περιέχει στοιχεία διαφορετικών τύπων.
  • ABS (αριθμός ) επιστρέφει την απόλυτη τιμή ενός αριθμού. Για παράδειγμα:

Το ABS (-123) επιστρέφει 123.

Το ABS (2 - 5) επιστρέφει 3.

  • MO D (αριθμός 1, αριθμός 2 ) επιστρέφει το υπόλοιπο μιας ακέραιας διαίρεσης του πρώτου αριθμού με τον δεύτερο. Για παράδειγμα:

Το MOD(5, h) επιστρέφει 2;

Το MOD(2, h) επιστρέφει 0.

  • LN (αριθμός ) επιστρέφει τον φυσικό λογάριθμο ενός αριθμού.
  • EXP (αριθμός) επιστρέφει τον αριθμό (η βάση του φυσικού λογάριθμου στη δύναμη του αριθμού).
  • POWER (αριθμός 1, αριθμός 2 ) επιστρέφει τον αριθμό 1αριθμός 2 (αριθμός 1 στη δύναμη του αριθμού 2).
  • SQRT (αριθμός ) επιστρέφει την τετραγωνική ρίζα ενός αριθμού.
  • ΟΡΟΦΟΣ (αριθμ ) επιστρέφει τον μεγαλύτερο ακέραιο που δεν υπερβαίνει αυτόν που καθορίζεται από την παράμετρο (στρογγυλοποίηση προς τα κάτω). Για παράδειγμα:

Ο FLOOR (5.123) επιστρέφει 5.0.

  • CEIL (αριθμός) ή CEILING (αριθμ ) επιστρέφει τον μικρότερο ακέραιο που δεν είναι μικρότερος από την τιμή που καθορίζεται από την παράμετρο στρογγυλοποίηση προς τα πάνω). Για παράδειγμα:

Το CEIL(5.123) επιστρέφει 6.0.

  • WIDTH_BUCKET (number1, number2, number3, number4) επιστρέφει έναν ακέραιο αριθμό στο εύρος μεταξύ 0 και number4 + 1. Οι παράμετροι number2 και number3 καθορίζουν ένα αριθμητικό διάστημα χωρισμένο σε ίσα διαστήματα, ο αριθμός του οποίου καθορίζεται από την παράμετρο number4 ο αριθμός του διαστήματος στο οποίο πέφτει η τιμή αριθμός1. Εάν ο αριθμός 1 βρίσκεται εκτός του καθορισμένου εύρους, τότε η συνάρτηση επιστρέφει 0 ή αριθμό 4 + 1. Για παράδειγμα:

Το WIDTH_BUCKET(3.14, 0, 9, 5) επιστρέφει 2.

Λειτουργίες ημερομηνίας-ώρας

ΣΕ Γλώσσα SQLΥπάρχουν τρεις λειτουργίες που επιστρέφουν την τρέχουσα ημερομηνία και ώρα.

  • CURRENT_DATE επιστρέφει την τρέχουσα ημερομηνία (τύπος DATE).

Για παράδειγμα: 2005-06-18.

  • CURRENT_TIME (αριθμός ) επιστρέφει την τρέχουσα ώρα (τύπος TIME). Η παράμετρος ακέραιος καθορίζει την ακρίβεια της αναπαράστασης δευτερολέπτων. Για παράδειγμα, μια τιμή 2 θα αντιπροσωπεύει δευτερόλεπτα στο πλησιέστερο εκατοστό (δύο δεκαδικά ψηφία):

12:39:45.27.

  • CURRENT_TIMESTAMP (αριθμός ) επιστρέφει ημερομηνία και ώρα (τύπος TIMESTAMP). Για παράδειγμα, 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 στις ακόλουθες δύο μορφές:

  • ΠΕΡΙΠΤΩΣΗ 1

ΟΤΑΝ τιμή 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

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

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

Παράδειγμα χρήσης του τύπου

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

Transact-SQL

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

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

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

Παράδειγμα χρήσης GROUP BY

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

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

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

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

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

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

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

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

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 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

Η συνάρτηση 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.Δουλεύουμε και πάλι με δύο τραπέζια - Προσωπικό και Οργαν. Εμφανίστε το όνομα του τμήματος και τη μέγιστη αξία της προμήθειας που έλαβε ένας υπάλληλος στο τμήμα που ανήκει στην ομάδα τμημάτων (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(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. Η πρόταση 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
Υλικά κατασκευής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