Junior
Ποια είναι η διαφορά μεταξύ των εντολών WHERE και HAVING σε SQL;
sobes.tech AI
Απάντηση από AI
Το WHERE φιλτράρει τις γραμμές πριν από την ομαδοποίηση. Το HAVING φιλτράρει τις ομάδες που δημιουργούνται με το GROUP BY, μετά την ομαδοποίηση.
WHERE:
- Εφαρμόζεται σε μεμονωμένες γραμμές.
- Δεν μπορεί να χρησιμοποιήσει συναρτήσεις σύνοψης (
COUNT,SUM,AVG,MIN,MAX). - Εκτελείται πριν από το
GROUP BY, τοHAVINGκαι τοSELECT.
HAVING:
- Εφαρμόζεται σε ομάδες γραμμών.
- Μπορεί να χρησιμοποιήσει συναρτήσεις σύνοψης.
- Εκτελείται μετά το
WHEREκαι τοGROUP BY, αλλά πριν από τοSELECT.
Παράδειγμα:
Βρείτε πελάτες από την πόλη 'Μόσχα' (όπου WHERE) των οποίων το συνολικό ποσό παραγγελιών υπερβαίνει τα 1000 (όπου HAVING).
SELECT customer_id, SUM(order_amount) -- Επιλέγει ID πελάτη και το άθροισμα των παραγγελιών του
FROM orders -- Από τον πίνακα παραγγελιών
WHERE city = 'Μόσχα' -- Φιλτράρει τις γραμμές πριν από την ομαδοποίηση, διατηρεί μόνο παραγγελίες από Μόσχα
GROUP BY customer_id -- Ομαδοποιεί τις γραμμές κατά ID πελάτη
HAVING SUM(order_amount) > 1000; -- Φιλτράρει τις ομάδες, διατηρεί μόνο αυτές με άθροισμα παραγγελιών > 1000