Junior
Ποια είναι η διαφορά μεταξύ των κατασκευών WHERE και HAVING σε SQL;
sobes.tech AI
Απάντηση από AI
WHERE φιλτράρει τις γραμμές πριν από την ομαδοποίηση (GROUP BY), επηρεάζοντας ποιες γραμμές θα συμμετάσχουν στις συναρτήσεις σύνοψης. HAVING φιλτράρει τις ομάδες μετά την ομαδοποίηση, βασιζόμενο στα αποτελέσματα των συναρτήσεων σύνοψης.
| Χαρακτηριστικό | WHERE | HAVING |
|---|---|---|
| Εφαρμογή | Σε μεμονωμένες γραμμές | Σε ομάδες γραμμών |
| Χρόνος επεξεργασίας | Πριν από το GROUP BY | Μετά το GROUP BY |
| Χρήση | Με πεδία από τον πίνακα, αλλά χωρίς συναρτήσεις σύνοψης | Με αποτελέσματα συναρτήσεων σύνοψης ή πεδία από το GROUP BY |
Παράδειγμα χρήσης WHERE:
SELECT όνομα_προϊόντος, τιμή
FROM προϊόντα
WHERE category_id = 1; -- Φιλτράρει γραμμές **πριν** από την ομαδοποίηση (αν γινόταν)
Παράδειγμα χρήσης HAVING:
SELECT category_id, COUNT(*) AS συνολικά_προϊόντα
FROM προϊόντα
GROUP BY category_id
HAVING COUNT(*) > 5; -- Φιλτράρει τις ομάδες **μετά** το μέτρημα του συνολικού αριθμού προϊόντων
Παράδειγμα συνδυασμένης χρήσης:
SELECT category_id, AVG(τιμή) AS μέση_τιμή
FROM προϊόντα
WHERE απόθεμα > 0 -- Φιλτράρει μόνο προϊόντα σε απόθεμα **πριν** από την ομαδοποίηση
GROUP BY category_id
HAVING AVG(τιμή) < 100; -- Φιλτράρει τις ομάδες με μέση τιμή κάτω από 100 **μετά** την ομαδοποίηση και τον υπολογισμό της μέσης τιμής