Ηλεκτρονικοί Υπολογιστές II

Σχετικά έγγραφα
GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) ΤΕΙ ΔυτικήςΜακεδονίας

Ηλεκτρονικοί Υπολογιστές II

Ηλεκτρονικοί Υπολογιστές II

Ηλεκτρονικοί Υπολογιστές II

Ηλεκτρονικοί Υπολογιστές II


1 / 97

1 / 87


Ηλεκτρονικοί Υπολογιστές II



Ηλεκτρονικοί Υπολογιστές I

Μικροβιολογία & Υγιεινή Τροφίμων


DELETE, UPDATE, INSERT.

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

DELETE, UPDATE, INSERT

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 6: SQL (Συζεύξεις, Εμφώλευση, Ομαδοποίηση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Τεχνολογία Πολιτισμικού Λογισμικού

Ηλεκτρονικοί Υπολογιστές I


Ηλεκτρονικοί Υπολογιστές II

1 / 150

Βάσεις Περιβαλλοντικών Δεδομένων

Ηλεκτρονικοί Υπολογιστές IV

Ηλεκτρονικοί Υπολογιστές I

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

1 / 105

Βάσεις Περιβαλλοντικών Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συνδυαστική Ανάλυση Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

1 / 106

Αρχεία και Βάσεις Δεδομένων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7α: SQL (NULL, Διαίρεση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Τεχνολογία Πολιτισμικού Λογισμικού

Ηλεκτρονικοί Υπολογιστές I

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7β: SQL (Πρακτική Εξάσκηση 1) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Ερωτήματα επιλογής με σύζευξη πινάκων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 5: SQL (Απλή SELECT) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Βάσεις δεδομένων. (7 ο μάθημα) Ηρακλής Βαρλάμης

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Υπολογιστές Ι. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Οικονομετρία. Εξειδίκευση του υποδείγματος. Μορφή της συνάρτησης: Πολυωνυμική, αντίστροφη και αλληλεπίδραση μεταβλητών

Ηλεκτρονικοί Υπολογιστές IV

Εκκλησιαστικό Δίκαιο

Εφαρμοσμένη Στατιστική

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Πληροφορική. Εργαστηριακή Ενότητα 6 η : Ταξινόμηση & Ομαδοποίηση Δεδομένων

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples ΙΙ Ξένου Ρουμπίνη

Εφαρμοσμένη Στατιστική

Εκκλησιαστικό Δίκαιο

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Ηλεκτρονικοί Υπολογιστές II

Ηλεκτρονικοί Υπολογιστές I

Ιστορία της μετάφρασης

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Βασικοί άξονες Μαθηματικά στην εκπαίδευση:

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Εισαγωγή στους Αλγορίθμους

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συναρτήσεις πολλών μεταβλητών Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

Εισαγωγή στους Αλγορίθμους

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Ηλεκτρονικοί Υπολογιστές I

Βάσεις Δεδομένων. Εργαστήριο ΙV. Τμήμα Πληροφορικής ΑΠΘ

Ηλεκτρισμός & Μαγνητισμός

Γενικά Μαθηματικά Ι. Ενότητα 14: Ολοκλήρωση Κατά Παράγοντες, Ολοκλήρωση Ρητών Συναρτήσεων Λουκάς Βλάχος Τμήμα Φυσικής

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Λογισμός 3. Ενότητα 19: Θεώρημα Πεπλεγμένων (γενική μορφή) Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 8: SQL (Πρακτική Εξάσκηση 2) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Εφαρμοσμένη Στατιστική

Ιστορία της μετάφρασης

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Μαθηματικά και Φυσική με Υπολογιστές

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

ΓΕΝΙΚΗ ΚΑΙ ΑΝΟΡΓΑΝΗ ΧΗΜΕΙΑ

Ηλεκτρισμός & Μαγνητισμός

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Εφαρμοσμένη Στατιστική

Γενικά Μαθηματικά Ι. Ενότητα 17: Αριθμητική Ολοκλήρωση, Υπολογισμός Μήκους Καμπύλης Λουκάς Βλάχος Τμήμα Φυσικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Εκκλησιαστικό Δίκαιο

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Οδοποιία IΙ. Ενότητα 14: Υπόδειγμα σύνταξης τευχών θέματος Οδοποιίας. Γεώργιος Μίντσης ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Εκκλησιαστικό Δίκαιο

PHP 3. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

1 / 106

Εργαστήριο Χημείας Ενώσεων Συναρμογής

Οικονομετρία. Πολλαπλή Παλινδρόμηση. Στατιστικός έλεγχος γραμμικού συνδυασμού συντελεστών. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

Εκπαιδευτική Διαδικασία και Μάθηση στο Νηπιαγωγείο Ενότητα 1: Εισαγωγή

Διοικητική Λογιστική

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ηλεκτρονικοί Υπολογιστές II SQL Ερωτήματα ομαδοποίησης και συνάθροισης Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

SQL: Ερωτήματα ομαδοποίησης και συνάθροισης GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr Άνοιξη 2014 1 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 2 / 56

Σκοπός του μαθήματος Αν κατανοήσετε αυτό το μάθημα, θα μπορείτε να: Βρίσκετε πλήθος εγγραφών ή ακραίες τιμές (μέγιστα, ελάχιστα) πεδίων. Βρίσκετε αθροίσματα και μέσους όρους αριθμητικών πεδίων. Ομαδοποιείτε εγγραφές με βάση ταυτιζόμενες τιμές σε κάποια πεδία με τη φράση GROUP BY. Εφαρμόζετε τις συναρτήσεις συνάθροισης στις εγγραφές που προκύπτουν από την ομαδοποίηση/συνάθροιση. Εφαρμόζετε την επέκταση της ομαδοποίησης για να παίρνετε μερικά αθροίσματα με την επιλογή WITH ROLLUP. Εφαρμόζετε περιορισμό στις εγγραφές που προκύπτουν μετά την ομαδοποίηση με τη φράση HAVING. 3 / 56

Συναρτήσεις συνάθροισης Υπάρχουν πέντε βασικές συναρτήσεις συνάθροισης, που υποστηρίζονται από όλα τα συστήματα SQL COUNT για την καταμέτρηση πλήθους SUM για το άθροισμα AVG για το μέσο όρο MIN για την ελάχιστη τιμή MAX για την μέγιστη τιμή Υπάρχουν αρκετές άλλες συναρτήσεις (πχ STDEV, VAR), αλλά η υποστήριξή τους ποικίλει από σύστημα σε σύστημα. 4 / 56

Διάγραμμα σύνταξης των συναρτήσεων συνάθροισης COUNT(*) DISTINCT COUNT( όνομα πεδίου) MIN(έκφραση) MAX(έκφραση) DISTINCT όνομα πεδίου AVG( έκφραση ) DISTINCT όνομα πεδίου SUM( έκφραση ) 5 / 56

Ο πίνακας employees από τη βάση company Εστω η σχέση employees με σχήμα: employees(empid, firstname, lastname, depid, salary, hiredate) empid firstname lastname depid salary hiredate 102 Νικηφόρος Διαμαντίδης 6 1212.50 2003-06-02 109 Μαρία Αθανασίου 1 2787.69 2000-01-26 153 Μαρία Αλεβιζάτου 2 1321.92 2001-05-15 172 Χρήστος Βλάσσης 3 1101.70 2000-07-04 189 Θεόδωρος Αγγελίνας 6 1908.28 2000-06-19.................. Δείγμα από τα δεδομένα του πίνακα. Δείτε τα πλήρη περιεχόμενα εδώ: http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=400 6 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 7 / 56

Παράδειγμα αθροίσματος στήλης Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων G sum(salary) (employees) 8 / 56

Παράδειγμα αθροίσματος στήλης Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων 1 SELECT SUM(salary) 2 FROM employees; 3 4 SUM(salary) 5 ------------- 6 38232.03 G sum(salary) (employees) 9 / 56

Παράδειγμα αθροίσματος στήλης Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων 1 SELECT SUM(salary) 2 FROM employees; 3 4 SUM(salary) 5 ------------- 6 38232.03 G sum(salary) (employees) 10 / 56

Παράδειγμα αθροίσματος υπό συνθήκη Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων του τμήματος 4 G sum(salary) (σ depid=4 (employees)) 11 / 56

Παράδειγμα αθροίσματος υπό συνθήκη Να βρεθεί το άθροισμα των μισθών όλων των υπαλλήλων του τμήματος 4 G sum(salary) (σ depid=4 (employees)) 1 SELECT SUM(salary) 2 FROM employees 3 WHERE depid = 4; 4 5 SUM(salary) 6 ------------- 7 3542.80 12 / 56

Παράδειγμα αθροίσματος γενικευμένης προβολής Να βρεθεί το επιπλέον ποσό που θα δοθεί σε μισθούς αν οι υπάλληλοι του τμήματος 3 πάρουν αύξηση 3% G sum(salary 0.03) sumsal3 (σ depid=3 (employees)) 13 / 56

Παράδειγμα αθροίσματος γενικευμένης προβολής Να βρεθεί το επιπλέον ποσό που θα δοθεί σε μισθούς αν οι υπάλληλοι του τμήματος 3 πάρουν αύξηση 3% G sum(salary 0.03) sumsal3 (σ depid=3 (employees)) 1 SELECT SUM(salary*0.03) AS sumsal3 2 FROM employees 3 WHERE depid = 3; 14 / 56

Παράδειγμα αθροίσματος γενικευμένης προβολής Να βρεθεί το επιπλέον ποσό που θα δοθεί σε μισθούς αν οι υπάλληλοι του τμήματος 3 πάρουν αύξηση 3% G sum(salary 0.03) sumsal3 (σ depid=3 (employees)) 1 SELECT SUM(salary*0.03) AS sumsal3 2 FROM employees 3 WHERE depid = 3; Η μετονομασία του πεδίου είναι χρήσιμη αλλά προαιρετική. Κάντε την πράξη με λογιστικό φύλλο και αναλύστε πλεονεκτήματα/μειονεκτήματα. Προσέξτε πως το μόνο που δηλώνει ο χρήστης στην SQL είναι ονόματα πεδίων και πινάκων. 15 / 56

Παράδειγμα υπολογισμού μέσου όρου Να βρεθεί ο μέσος μισθός όλων των υπαλλήλων G avg(salary) (employees) 16 / 56

Παράδειγμα υπολογισμού μέσου όρου Να βρεθεί ο μέσος μισθός όλων των υπαλλήλων G avg(salary) (employees) 1 SELECT AVG(salary) 2 FROM employees; 3 4 AVG(salary) 5 --------------- 6 1416.001111 17 / 56

Μέσος όρος με περιορισμό εγγραφών Να βρεθεί ο μέσος μισθός των υπαλλήλων του τμήματος 3 G avg(salary) (σ depid=3 (employees)) 18 / 56

Μέσος όρος με περιορισμό εγγραφών Να βρεθεί ο μέσος μισθός των υπαλλήλων του τμήματος 3 G avg(salary) (σ depid=3 (employees)) 1 SELECT AVG(salary) 2 FROM employees 3 WHERE depid = 3; 4 5 AVG(salary) 6 --------------- 7 1311.651250 19 / 56

Ελάχιστη τιμή Να βρεθεί ο μικρότερος μισθός των υπαλλήλων του τμήματος 3 G min(salary) σ depid=3 (employees) 20 / 56

Ελάχιστη τιμή Να βρεθεί ο μικρότερος μισθός των υπαλλήλων του τμήματος 3 G min(salary) σ depid=3 (employees) 1 SELECT MIN(salary) 2 FROM employees 3 WHERE depid = 3; 4 5 MIN(salary) 6 --------------- 7 1050.96 21 / 56

Μέγιστη τιμή Να βρεθεί η ημερομηνία της πιο πρόσφατης πρόσληψης G max(hiredate) (employees) 1 SELECT MAX(hiredate) 2 FROM employees; 3 4 MAX(hiredate) 5 ----------------- 6 2004-10-05 22 / 56

Καταμέτρηση πλήθους Να βρεθεί πόσοι υπάλληλοι εργάζονται στο τμήμα 4 G count(empid) (σ depid=4 (employees)) 23 / 56

Καταμέτρηση πλήθους Να βρεθεί πόσοι υπάλληλοι εργάζονται στο τμήμα 4 G count(empid) (σ depid=4 (employees)) 1 SELECT COUNT(empid) 2 FROM employees 3 WHERE depid = 4; 4 5 COUNT(empid) 6 ---------------- 7 5 24 / 56

COUNT(*) Να βρεθεί πόσοι υπάλληλοι εργάζονται στο τμήμα 4 1 SELECT COUNT(*) 2 FROM employees 3 WHERE depid = 4; 4 5 COUNT(*) 6 ---------------- 7 5 1 COUNT(empid) : Καταμέτρηση εγγραφών με μη NULL τιμές στο πεδίο empid. 2 COUNT(*) : Καταμέτρηση εγγραφών 25 / 56

Δύο συναρτήσεις στο ίδιο ερώτημα Να βρεθεί το εύρος το μισθών του τμήματος 4 G max(salary) min(salary) (employees) 26 / 56

Δύο συναρτήσεις στο ίδιο ερώτημα Να βρεθεί το εύρος το μισθών του τμήματος 4 G max(salary) min(salary) (employees) 1 SELECT MAX(salary)-MIN(salary) 2 FROM employees 3 WHERE depid = 4; 4 5 MAX(salary)-MIN(salary) 6 --------------------------- 7 331.34 27 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 28 / 56

Πλήθος μισθοδοτούμενων υπαλλήλων Να βρεθεί το πλήθος καταχωρημένων μισθών 1 SELECT COUNT(salary) 2 FROM employees; 3 4 count(salary) 5 ----------------- 6 27 Να βρεθεί το πλήθος των κωδικών των υπαλλήλων 1 SELECT COUNT(empid) 2 FROM employees; 3 4 count(empid) 5 ---------------- 6 30 Υπάρχουν 30 υπάλληλοι αλλά 27 μισθοί COUNT(salary) δεν μετράει τις τιμές NULL Το πεδίο empid δεν παίρνει ποτέ τιμές NULL γιατί είναι πρωτεύον κλειδί 29 / 56

Τιμές NULL Να βρεθεί το πλήθος των υπαλλήλων χωρίς μισθό 1 SELECT COUNT(salary) 2 FROM employees 3 WHERE salary IS NULL; 4 5 COUNT(salary) 6 ----------------- 7 0 Να βρεθεί το πλήθος των υπαλλήλων χωρίς μισθό 1 SELECT COUNT(empid) 2 FROM employees 3 WHERE salary IS NULL; 4 5 count(empid) 6 ---------------- 7 3 Οι τιμές NULL δεν απαριθμούνται. Το πλήθος των εγγραφών με τιμή NULL στο πεδίο salary είναι 3. 30 / 56

Καταμέτρηση μοναδικών τιμών (Λάθος) Να βρεθεί το πλήθος των τμημάτων των υπαλλήλων 1 SELECT COUNT(depid) 2 FROM employees; 3 4 COUNT(depid) 5 ---------------- 6 30 31 / 56

Καταμέτρηση μοναδικών τιμών (Σωστό) Να βρεθεί το πλήθος των τμημάτων των υπαλλήλων 1 SELECT COUNT(DISTINCT depid) 2 FROM employees; 3 4 COUNT(DISTINCT depid) 5 ------------------------- 6 6 32 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 33 / 56

Ομαδοποίηση Μέχρι τώρα είδαμε απλά ερωτήματα, η απάντηση των οποίων ήταν μία τιμή. Πολλές φορές το ζητούμενο είναι μια λίστα τιμών, μία τιμή ανά κατηγορία. Πχ ο μέσος μισθός ανά τμήμα, ή ο αρχαιότερος υπάλληλος ανά τμήμα Για αυτές τις περιπτώσεις θα χρειαστούμε μια νέα φράση: GROUP BY 34 / 56

Πλήθος υπαλλήλων ανά τμήμα Πλήθος υπαλλήλων ανά τμήμα depidg count( ) (employees) 35 / 56

Πλήθος υπαλλήλων ανά τμήμα Πλήθος υπαλλήλων ανά τμήμα depidg count( ) (employees) 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 36 / 56

Πλήθος υπαλλήλων ανά τμήμα Πλήθος υπαλλήλων ανά τμήμα depidg count( ) (employees) 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 Η SQL έχει πλεονεκτήματα: Δεν χρειάζεται να γνωρίζουμε το μέγεθος του πίνακα. Το ίδιο ακριβώς ερώτημα SQL θα χρησιμοποιηθεί έστω και αν αλλάξουν τα δεδομένα του πίνακα μετά από προσθήκη ή αφαίρεση εγγραφών. 37 / 56

Μικρότερο ανά... Ο μικρότερος μισθός ανά τμήμα υπαλλήλων depidg min(salary) (employees) 38 / 56

Μικρότερο ανά... Ο μικρότερος μισθός ανά τμήμα υπαλλήλων depidg min(salary) (employees) 1 SELECT depid, MIN(salary) 2 FROM employees 3 GROUP BY depid; 4 5 depid MIN(salary) 6 ------------------- 7 1 1754.67 8 2 1105.04 9 3 1050.96 10 4 1054.71 11 5 1051.92 12 6 1100.13 39 / 56

Περιορισμός και ομαδοποίηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα για τους υπαλλήλους που προσλήφθηκαν μέσα στο 2004 depidg sum(salary) (σ hiredate 2004 01 01 hiredate 2004 12 31 (employees)) 40 / 56

Περιορισμός και ομαδοποίηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα για τους υπαλλήλους που προσλήφθηκαν μέσα στο 2004 depidg sum(salary) (σ hiredate 2004 01 01 hiredate 2004 12 31 (employees)) 1 SELECT depid, SUM(salary) 2 FROM employees 3 WHERE hiredate BETWEEN 2004-01-01 4 AND 2004-12-31 5 GROUP BY depid; 41 / 56

Ομαδοποίηση και ταξινόμηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα με φθίνουσα ταξινόμηση ως προς το άθροισμα των μισθών 42 / 56

Ομαδοποίηση και ταξινόμηση Να βρεθεί το άθροισμα των μισθών των υπαλλήλων ανά τμήμα με φθίνουσα ταξινόμηση ως προς το άθροισμα των μισθών 1 SELECT depid, SUM(salary) 2 FROM employees 3 GROUP BY depid 4 ORDER BY SUM(salary) DESC; 5 depid SUM(salary) 6 ------- ------------- 7 3 10493.21 8 6 9853.82 9 1 6395.35 10 2 5360.28 11 4 3542.80 12 5 2586.57 43 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 44 / 56

Περιορισμός μετά την ομαδοποίηση Τμήματα με περισσότερους από 4 υπαλλήλους σ count(depid)>4 ( depidg count(empid) (employees) ) 45 / 56

Περιορισμός μετά την ομαδοποίηση Τμήματα με περισσότερους από 4 υπαλλήλους σ count(depid)>4 ( depidg count(empid) (employees) ) 1 SELECT depid, COUNT(depid) 2 FROM employees 3 GROUP BY depid 4 HAVING COUNT(depid) > 4; 46 / 56

Περιορισμός μετά την ομαδοποίηση Τμήματα με περισσότερους από 4 υπαλλήλους σ count(depid)>4 ( depidg count(empid) (employees) ) 1 SELECT depid, COUNT(depid) 2 FROM employees 3 GROUP BY depid 4 HAVING COUNT(depid) > 4; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 Ο όρος HAVING τοποθετείται μετά τον όρο GROUP BY. Η σύνταξη είναι παρόμοια με αυτή του όρου WHERE. Ο όρος HAVING περιορίζει το αποτέλεσμα του ερωτήματος με βάση πεδία που παράγονται από τον όρο GROUP BY. 47 / 56

Περιορισμός πριν και μετά την ομαδοποίηση Να βρεθούν τα τμήματα με περισσότερους από 3 υπαλλήλους με μισθό μεγαλύτερο από 1200 σ count(depid)>3 ( depidg count(empid) (σ salary>1200 (employees)) ) 48 / 56

Περιορισμός πριν και μετά την ομαδοποίηση Να βρεθούν τα τμήματα με περισσότερους από 3 υπαλλήλους με μισθό μεγαλύτερο από 1200 σ count(depid)>3 ( depidg count(empid) (σ salary>1200 (employees)) ) 1 SELECT depid 2 FROM employees 3 WHERE salary > 1200 4 GROUP BY depid 5 HAVING COUNT(depid) > 3; 6 7 depid 8 ------- 9 3 10 6 49 / 56

Περιεχόμενα 1 Εισαγωγή, γενικές παρατηρήσεις 2 Συναρτήσεις συνάθροισης 3 Τιμές NULL και μοναδικές τιμές 4 Ομαδοποίηση εγγραφών 5 Περιορισμός μετά την ομαδοποίηση 6 Μερικά και ολικά αθροίσματα 50 / 56

ROLLUP (μερικά αθροίσματα) Πλήθος των υπαλλήλων ανά τμήμα και το συνολικό πλήθος των υπαλλήλων της εταιρείας 51 / 56

ROLLUP (μερικά αθροίσματα) Πλήθος των υπαλλήλων ανά τμήμα και το συνολικό πλήθος των υπαλλήλων της εταιρείας 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid WITH ROLLUP; 52 / 56

ROLLUP (μερικά αθροίσματα) Πλήθος των υπαλλήλων ανά τμήμα και το συνολικό πλήθος των υπαλλήλων της εταιρείας 1 SELECT depid, COUNT(*) 2 FROM employees 3 GROUP BY depid WITH ROLLUP; depid COUNT(*) 1 3 2 4 3 9 4 5 5 2 6 7 NULL 30 WITH ROLLUP : μετά το πεδίο που ακολουθεί τον όρο GROUP BY. Προσοχή την τιμή NULL στο τέλος που αντιστοιχεί στο σύνολο των εγγραφών. 53 / 56

Μερικά αθροίσματα με διπλή ομαδοποίηση Να βρεθεί ο μέσος μισθός των υπαλλήλων ανά τμήμα και έτος πρόσληψης για τμήματα με κωδικό 2 και 6 1 SELECT depid, YEAR(hiredate), AVG(salary) 2 FROM employees 3 WHERE depid IN (2,6) 4 GROUP BY depid, YEAR(hiredate) WITH ROLLUP; 5 6 depid YEAR(hiredate) AVG(salary) 7 ---------------------------------------- 8 2 1999 1609.520000 9 2 2000 1323.800000 10 2 2001 1213.480000 11 2 NULL 1340.070000 12 6 2000 1771.620000 13 6 2001 1336.985000 14 6 2002 1323.980000 15 6 2003 1156.315000 16 6 NULL 1407.688571 17 NULL NULL 1383.100000 54 / 56

Αναστροφή της λίστας πεδίων Ο μέσος μισθός των υπαλλήλων ανά έτος πρόσληψης και τμήμα για τμήματα με κωδικό 2 και 6 1 SELECT YEAR(hiredate), depid, AVG(salary) 2 FROM employees 3 WHERE depid IN (2,6) 4 GROUP BY YEAR(hiredate), depid WITH ROLLUP; 5 6 YEAR(hiredate) depid AVG(salary) 7 ---------------------------------------- 8 1999 2 1609.520000 9 1999 NULL 1609.520000 10 2000 2 1323.800000 11 2000 6 1771.620000 12... 13 NULL NULL 1383.100000 55 / 56

Σχόλια και ερωτήσεις Σας ευχαριστώ για την προσοχή σας Είμαι στη διάθεσή σας για σχόλια, απορίες και ερωτήσεις 56 / 56

Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1065.

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης. «Ηλεκτρονικοί Υπολογιστές II. SQL Ερωτήματα ομαδοποίησης και συνάθροισης». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1065.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.