Sobes.tech
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