Sobes.tech
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 **μετά** την ομαδοποίηση και τον υπολογισμό της μέσης τιμής