Οι συνολικές λειτουργίες έχουν να κάνουν
- Εκτέλεση υπολογισμών σε πολλές σειρές
- Από μία στήλη πίνακα
- Και επιστρέφοντας μία τιμή.
Το πρότυπο ISO ορίζει πέντε (5) συγκεντρωτικές συναρτήσεις, δηλαδή:
1) COUNT
3) AVG
4) MIN
5) MAX
Γιατί να χρησιμοποιήσετε συγκεντρωτικές συναρτήσεις.
Από επιχειρηματική άποψη, διαφορετικά επίπεδα οργανισμού έχουν διαφορετικές απαιτήσεις πληροφοριών. Οι ανώτεροι διευθυντές ενδιαφέρονται συνήθως να γνωρίζουν ολόκληρα στοιχεία και όχι απαραίτητα τις ατομικές λεπτομέρειες.
> Οι συγκεντρωτικές λειτουργίες μας επιτρέπουν να παράγουμε εύκολα συνοπτικά δεδομένα από τη βάση δεδομένων μας.
Για παράδειγμα, από τη βάση δεδομένων myflix, η διαχείριση ενδέχεται να απαιτεί τις ακόλουθες αναφορές
- Λιγότερες ενοικιαζόμενες ταινίες.
- Οι περισσότερες ενοικιαζόμενες ταινίες.
- Μέσος αριθμός ενοικίασης κάθε ταινίας σε ένα μήνα.
Παράγουμε εύκολα τις παραπάνω αναφορές χρησιμοποιώντας συγκεντρωτικές συναρτήσεις.
Ας δούμε λεπτομερώς τις συνολικές συναρτήσεις.
Συνάρτηση COUNT
Η συνάρτηση COUNT επιστρέφει τον συνολικό αριθμό τιμών στο καθορισμένο πεδίο. Λειτουργεί τόσο σε αριθμητικούς όσο και σε μη αριθμητικούς τύπους δεδομένων. Όλες οι συναθροιστικές συναρτήσεις εξαιρούν από προεπιλογή τιμές nulls πριν από την επεξεργασία των δεδομένων.
Το COUNT (*) είναι μια ειδική εφαρμογή της συνάρτησης COUNT που επιστρέφει τον αριθμό όλων των σειρών σε έναν καθορισμένο πίνακα. COUNT (*) λαμβάνει επίσης υπόψη Nulls και διπλότυπα.
Ο πίνακας που φαίνεται παρακάτω δείχνει δεδομένα στον πίνακα movierentals
αριθμός αναφοράς | Ημερομηνία Συναλλαγής | ημερομηνία επιστροφής | αριθμός μέλους | movie_id | η ταινία_ επέστρεψε |
---|---|---|---|---|---|
11 | 20-06-2012 | ΜΗΔΕΝΙΚΟ | 1 | 1 | 0 |
12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
15 | 23-06-2012 | ΜΗΔΕΝΙΚΟ | 3 | 3 | 0 |
Ας υποθέσουμε ότι θέλουμε να λάβουμε τον αριθμό των φορών που ενοικιάστηκε η ταινία με το αναγνωριστικό 2
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Η εκτέλεση του παραπάνω ερωτήματος στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα.
COUNT('movie_id') |
---|
3 |
Λέξη-κλειδί DISTINCT
Η λέξη-κλειδί DISTINCT που μας επιτρέπει να παραλείψουμε διπλότυπα από τα αποτελέσματά μας. Αυτό επιτυγχάνεται ομαδοποιώντας παρόμοιες τιμές.
Για να εκτιμήσουμε την έννοια του Distinct, ας εκτελέσουμε ένα απλό ερώτημα
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
Τώρα ας εκτελέσουμε το ίδιο ερώτημα με τη διακριτή λέξη-κλειδί -
SELECT DISTINCT `movie_id` FROM `movierentals`;
Όπως φαίνεται παρακάτω, διακριτές παραλείπουν διπλές εγγραφές από τα αποτελέσματα.
movie_id |
---|
1 |
2 |
3 |
Λειτουργία MIN
Η συνάρτηση MIN επιστρέφει τη μικρότερη τιμή στο καθορισμένο πεδίο πίνακα .
Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να μάθουμε τη χρονιά κατά την οποία κυκλοφόρησε η παλαιότερη ταινία στη βιβλιοθήκη μας, μπορούμε να χρησιμοποιήσουμε τη λειτουργία MIN της MySQL για να λάβουμε τις επιθυμητές πληροφορίες.
Το ακόλουθο ερώτημα μας βοηθά να το επιτύχουμε
SELECT MIN(`year_released`) FROM `movies`;
Η εκτέλεση του παραπάνω ερωτήματος στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα.
MIN('year_released') |
---|
2005 |
Συνάρτηση MAX
Όπως υποδηλώνει το όνομα, η συνάρτηση MAX είναι το αντίθετο της συνάρτησης MIN. Είναι επιστρέφει τη μεγαλύτερη τιμή από την καθορισμένη πεδίο πίνακα .
Ας υποθέσουμε ότι θέλουμε να πάρουμε τη χρονιά που κυκλοφόρησε η τελευταία ταινία στη βάση δεδομένων μας. Μπορούμε εύκολα να χρησιμοποιήσουμε τη λειτουργία MAX για να το πετύχουμε.
Το παρακάτω παράδειγμα επιστρέφει το τελευταίο έτος ταινίας που κυκλοφόρησε.
SELECT MAX(`year_released`) FROM `movies`;
Η εκτέλεση του παραπάνω ερωτήματος στον πάγκο εργασίας MySQL χρησιμοποιώντας το myflixdb μας δίνει τα ακόλουθα αποτελέσματα.
MAX('year_released') |
---|
2012 |
Συνάρτηση SUM
Ας υποθέσουμε ότι θέλουμε μια αναφορά που να παρέχει το συνολικό ποσό των πληρωμών που έχουν πραγματοποιηθεί μέχρι στιγμής. Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση MySQL SUM που επιστρέφει το άθροισμα όλων των τιμών στην καθορισμένη στήλη . Το SUM λειτουργεί μόνο σε αριθμητικά πεδία . Οι μηδενικές τιμές εξαιρούνται από το αποτέλεσμα που επιστρέφεται.
Ο παρακάτω πίνακας δείχνει τα δεδομένα στον πίνακα πληρωμών-
πληρωμή_ αναγνωριστικό | αριθμός μέλους | ημερομηνία πληρωμής | περιγραφή | ποσό που καταβάλλεται | εξωτερικό_αναφορά _ αριθμός |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Πληρωμή ενοικίασης ταινιών | 2500 | 11 |
2 | 1 | 25-07-2012 | Πληρωμή ενοικίασης ταινιών | 2000 | 12 |
3 | 3 | 30-07-2012 | Πληρωμή ενοικίασης ταινιών | 6000 | ΜΗΔΕΝΙΚΟ |
Το ερώτημα που εμφανίζεται παρακάτω λαμβάνει όλες τις πληρωμές που πραγματοποιούνται και τις συνοψίζει για να επιστρέψει ένα μόνο αποτέλεσμα.
SELECT SUM(`amount_paid`) FROM `payments`;
Η εκτέλεση του παραπάνω ερωτήματος στον πάγκο εργασίας MySQL κατά του myflixdb δίνει τα ακόλουθα αποτελέσματα.
SUM('amount_paid') |
---|
10500 |
Λειτουργία AVG
Η συνάρτηση MySQL AVG επιστρέφει τον μέσο όρο των τιμών σε μια καθορισμένη στήλη . Όπως και η συνάρτηση SUM, λειτουργεί μόνο σε αριθμητικούς τύπους δεδομένων .
Ας υποθέσουμε ότι θέλουμε να βρούμε το μέσο ποσό που πληρώθηκε. Μπορούμε να χρησιμοποιήσουμε το ακόλουθο ερώτημα -
SELECT AVG(`amount_paid`) FROM `payments`;
Η εκτέλεση του παραπάνω ερωτήματος στον πάγκο εργασίας MySQL, μας δίνει τα ακόλουθα αποτελέσματα.
AVG('amount_paid') |
---|
3500 |
Περίληψη
- Η MySQL υποστηρίζει και τις πέντε (5) τυπικές συγκεντρωτικές λειτουργίες ISO COUNT, SUM, AVG, MIN και MAX.
- Οι λειτουργίες SUM και AVG λειτουργούν μόνο σε αριθμητικά δεδομένα.
- Εάν θέλετε να εξαιρέσετε διπλές τιμές από τα αποτελέσματα της συνάρτησης, χρησιμοποιήστε τη λέξη-κλειδί DISTINCT. Η λέξη-κλειδί ALL περιλαμβάνει ακόμη και διπλότυπα. Εάν δεν έχει καθοριστεί τίποτα, το ALL θεωρείται ως προεπιλογή.
- Οι συγκεντρωτικές συναρτήσεις μπορούν να χρησιμοποιηθούν σε συνδυασμό με άλλες ρήτρες SQL όπως GROUP BY
Σπαζοκεφαλιά
Πιστεύετε ότι οι συγκεντρωτικές λειτουργίες είναι εύκολες. Δοκιμάστε αυτό!
Το παρακάτω παράδειγμα ομαδοποιεί τα μέλη κατά όνομα, μετρά τον συνολικό αριθμό πληρωμών, το μέσο ποσό πληρωμής και το συνολικό σύνολο των ποσών πληρωμής.
SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
Η εκτέλεση του παραπάνω παραδείγματος στον πάγκο εργασίας MySQL μας δίνει τα ακόλουθα αποτελέσματα.