GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

Σχετικά έγγραφα
Ηλεκτρονικοί Υπολογιστές II

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


1 / 97

1 / 87





DELETE, UPDATE, INSERT.

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

DELETE, UPDATE, INSERT

DISTINCT, LIKE, NULL, AND, OR, BETWEEN


1 / 150

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

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

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

1 / 105

1 / 106

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

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

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

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

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

1 / 106

Σχεδίαση Βάσεων Δεδομένων

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Κεφάλαιο 9 Συναθροίσεις

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

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

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

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

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

Βάσεις Δεδομένων. Ενότητα 7.1: Structured Query Language - 1 ο Μέρος. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

Πρόλογος Μέρος Ι Μια βόλτα στις βάσεις δεδομένων Μια βόλτα στις βάσεις δεδομένων...25

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

Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)

Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL

Τμήμα Πληροφορικής ΑΠΘ

Περιεχόμενα. Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL. Συνένωση Σχέσεων στην SQL2 (3) Συνένωση Σχέσεων στην SQL2. (Join Relations Feature in SQL)

SQL Data Manipulation Language

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΘΕΜΑΤΑ. Θέμα 1 ο Σύμφωνα με τους παραπάνω πίνακες και τη θέση που έχουν τα ξένα κλειδιά βρείτε τους

Τμήμα Διοίκησης Επιχειρήσεων

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

Βάσεις Δεδομένων (Databases)

ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Αντικείμενα: Βάσεις δεδομένων, σχέσεις μεταξύ πινάκων, ερωτήματα, φόρμες και αναφορές.


PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model. SQL Μαθ. #11

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

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

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

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

Τμήμα Πληροφορικής ΑΠΘ

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

Σχεδιασμός Βάσεων Δεδομένων

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

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Διαχείριση Πολιτισμικών Δεδομένων

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Κεφάλαιο 10 Άλλες Πράξεις Θεωρίας Συνόλων

MOCϦϣΎϬϴϠϋϝϮμΤϟϢΗϊΟήϤϟ. USE northwind SELECT employeeid, lastname, firstname, title FROM employees GO

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) Ενότητα Advanced Βάσεις Δεδομένων, Προχωρημένο Επίπεδο. Copyright 2013 ECDL Foundation Ref: SL_AM3_Syl2.

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

Lecture 16: SQL DML III

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

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

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΓΡΕΒΕΝΑ)

Βάσεις Δεδομένων Ι 8. Ερωτήματα (B) Τμήμα Διοίκησης Επιχειρήσεων (Μεσολόγγι) ΤΕΙ Δυτικής Ελλάδας

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι


Βάσεις Δεδομένων Ι SQL Μέρος 2 ο. Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Κεφάλαιο 3. Ερωτήματα SQL

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

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

Σχεδίαση Βάσεων Δεδομένων

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2005

Παράδειγμα Select Introduction Group By Join Aliases.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (3)

Διάλεξη 14: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) II. Διδάσκων: Παναγιώτης Ανδρέου

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

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 5 21/02/2012

Σύβακας Σταύρος ΠΕ19,MSc. IT ΣΥΒΑΚΑΣ ΣΤΑΥΡΟΣ ΕΡΩΤΗΜΑΤΑ

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

Βάσεις Δεδομένων (Databases)

ΕΝΗΜΕΡΩΣΗ ΔΕΔΟΜΕΝΩΝ. UPDATE products SET prod_fpa=19 WHERE prod_fpa=23; SELECT prod_descr,purchase,purchase_date FROM products WHERE prod_fpa=9;

Αντώνης Χρυσόπουλος Στέλιος Μόσχογλου Θεοδόσης Σουργκούνης MYSQL PHP ADVANCED. Χέρι χέρι με τον Καρατζαφέρη

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

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πεδί α

Microsoft EXCEL ΛΟΓΙΣΤΙΚΑ ΦΥΛΛΑ ECDL. Περιεχόμενα. Απόκτησε τώρα το δίπλωμα. για να θεωρείσαι Επαγγελματίας! 1 Χρήση της Εφαρμογής.

Transcript:

SQL: Ερωτήματα ομαδοποίησης και συνάθροισης GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr Άνοιξη 2016 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; Να βρεθεί το πλήθος των κωδικών των υπαλλήλων 1 SELECT COUNT(empid) 2 FROM employees; 3 4 count(salary) 5 ----------------- 6 27 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

Μικρότερο ανά... Ο μικρότερος μισθός ανά τμήμα υπαλλήλων 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 depidg min(salary) (employees) 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 6 depid SUM(salary) 7 ------- ------------- 8 3 10493.21 9 6 9853.82 10 1 6395.35 11 2 5360.28 12 4 3542.80 13 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 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