FREE

PostgreSQL Unit 7 - ORDER BY, MIN, MAX, SUM, AVG

Στο σημερινό δωρεάν μάθημα SQL θα μάθουμε πως να ταξινομούμε τα δεδομένα μας με την χρήση του ORDER BY και πως να χρησιμοποιούμε τα έτοιμα functions που μας προσφέρει η PostgreSQL όπως AVG, MIN, MAX και SUM.

Σε προηγούμενη ενότητα είχαμε χρησιμοποιήσει την εντολή DISTINCT μπροστά από μια στήλη για να πάρουμε τις μοναδικές τιμές που περιέχει η στήλη. Ένα τέτοιο παράδειγμα είναι το εξής:

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Αν και τα δεδομένα που λαμβάνουμε σαν αποτέλεσμα είναι αυτά ακριβώς που ζητάμε, το πρόβλημα που έχουμε είναι ότι σε ένα μεγάλο μέγεθος δεδομένων δεν μπορούμε εύκολα να βγάλουμε συμπεράσματα γιατί δεν υπάρχει κάποια ταξινόμηση π.χ αλφαβητική. Στην παραπάνω εικόνα το Belgium είναι έκτο ενώ η Spain είναι δεύτερη. Ένα τέτοιο αποτέλεσμα θα μας πάρει κάποιο χρόνο για να μπορούμε να το αναλύσουμε απλά κοιτάζοντας το.

Για να αναλύσουμε πιο γρήγορα μια τέτοια λίστα με δεδομένα χρειαζόμαστε κάποια ταξινόμηση είτε αλφαβητική, είτε αριθμητική είτε ακόμα και χρονική. Αυτή την δυνατότητα μας την δίνει η εντολή ORDER BY. Η γενική δομή ενός query που περιέχει το ORDER BY είναι η εξής:

SELECT <column1>, <column2>,…

FROM <table_name>

ORDER BY column1, column2, …ASC | DESC

Ας δούμε ένα συγκεκριμένο παράδειγμα, και θα κατανοήσουμε καλύτερα τις επιλογές που έχουμε με την χρήση του ORDER BY. Ζητάμε λοιπόν να δούμε μια λίστα με τις χώρες στις οποίες έχουμε προμηθευτές με αλφαβητική ταξινόμηση.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Αφού λοιπόν έχει εκτελεστεί το βασικό μέρος του query (δηλαδή το SELECT), πριν εμφανιστεί το αποτέλεσμα το ταξινομούμε αλφαβητικά. Η ταξινόμηση γίνεται με βάση την στήλη country. Όμως δεν είναι απαραίτητο να ταξινομούμε ένα αποτέλεσμα με στήλη που θα εμφανιστεί και στο αποτέλεσμα. Μπορούμε να χρησιμοποιήσουμε οποιαδήποτε στήλη. Το ASC σημαίνει Ascending δηλαδή από τον μικρότερο αριθμό, χαρακτήρα ή ημερομηνία προς το μεγαλύτερο ενώ το Descending (DESC) ακριβώς το αντίθετο. Ας δοκιμάσουμε και το DESC για να δούμε πως θα είναι το αποτέλεσμα.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Στο query που μόλις δοκιμάσαμε, ας προσθέσουμε και την πόλη στην οποία βρίσκονται οι προμηθευτές.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Ας εξηγήσουμε λίγο το αποτέλεσμα. Το Distinct εφαρμόζεται ταυτόχρονα και στις δύο στήλες. Οπότε, αν και έχουμε δύο φορές το όνομα Australia αλλάζει η city κάθε φορά. Ο συνδυασμός χώρας και πόλης από την στιγμή που είναι μοναδικός θα εμφανιστεί στο αποτέλεσμα. Τις χώρες τις έχουμε ορίσει να είναι ASC και τις πόλεις για κάθε χώρα να είναι DESC. Μπορείτε να κάνετε οποιοδήποτε συνδυασμό επιθυμείτε.

Η PostgreSQL μας προσφέρει αρκετές έτοιμες functions που μπορούμε να χρησιμοποιήσουμε για να φιλτράρουμε ακόμα πιο πολύ τα αποτελέσματα μας. Δύο από αυτές τις functions είναι η MIN και η MAX. Το συντακτικό που πρέπει να ακολουθήσουμε για να εφαρμόσουμε αυτές τις functions στα δεδομένα μας είναι ο εξής:

Για το MIN:

SELECT MIN(<column>)

FROM <table_name>

WHERE <condition>;

Για το MAX:

SELECT MAX(<column>)

FROM <table_name>

WHERE <condition>;

Πότε όμως εφαρμόζονται αυτά τα functions? Για να το καταλάβουμε ας προσπαθήσουμε να απαντήσουμε το εξής ερώτημα: πότε ήταν η πρώτη παραγγελία που έγινε από την χώρα Ιταλία? Για να βρούμε την απάντηση θα πρέπει να βρούμε πια είναι η παλαιότερη ημερομηνία παραγγελίας που έγινε για να την χώρα Ιταλία. Αυτό σημαίνει ότι θα χρησιμοποιήσουμε την function MIN σε στήλη που περιέχει ημερομηνίες.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Με την ίδια λογική, θα μπορούσαμε να απαντήσουμε πότε ήταν η τελευταία παραγγελία που εστάλη στη χώρα του Καναδά. Αυτή τη φορά όμως χρειαζόμαστε την MAX function για να μας δώσει την σωστή ημερομηνία.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

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

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Όπως ήδη καταλάβατε, με την έτοιμη λογική που μας προσφέρουν τα functions μπορούμε να πάρουμε γρήγορα αυτό που ζητάμε με τον λιγότερο δυνατόν κώδικα. Υπάρχουν δύο ακόμα functions που είναι πολύ συνηθισμένα σε όσους γράφουν SQL – και αυτά είναι το AVG και το SUM. Το Average (AVG) μας δίνει το μέσο όρο των τιμών μιας στήλης, ενώ το Summary (SUM) μας δίνει το άθροισμα των τιμών μιας στήλης.

Ας υποθέσουμε λοιπόν ότι ζητάμε να βρούμε το μέσο όρο του φορτίου που έχει σταλθεί στην Βραζιλία.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Για το επόμενο ερώτημα μας, θα χρειαστούμε μια έξτρα πληροφορία, και αυτή είναι το product_id που έχει το προϊόν Ipoh Coffe. Αυτή η πληροφορία βρίσκεται στον πίνακα products.

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL

Τώρα που γνωρίζουμε αυτή την πληροφορία μπορούμε να συγκεντρωθούμε στο κύριο μας ερώτημα που είναι το εξής: Ποιος είναι ο συνολικός αριθμός πακέτων καφέ Ipoh Coffee (id=43) που έχουν παραγγελθεί μέχρι τώρα?

Δωρεάν Μαθήματα και Σεμινάρια SQL και PostgreSQL