סנן קבוצות עם HAVING

הושלם

לאחר שיצרת קבוצות עם פסוקית GROUP BY, באפשרותך לסנן עוד יותר את התוצאות. פסוקית HAVING פועלת כמסנן בקבוצות. פעולה זו דומה לא באופן שבו פסוקית WHERE פועלת כמסנן בשורות המוחזרות על-ידי משפט FROM.

פסוקית HAVING מאפשרת לך ליצור תנאי חיפוש, בדומה לתוקף של פסוקית WHERE, אשר בודקת לאחר מכן כל קבוצה שהוחזרו על-ידי פסוקית GROUP BY.

הדוגמה הבאה סופרת את ההזמנות עבור כל לקוח ומסנן את התוצאות כך שיכלולו רק לקוחות שהבצעו יותר מ- 10 הזמנות:

SELECT CustomerID,
      COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;

השווה HAVING ל- WHERE

בעוד שפסוקיות HAVING ו- WHERE מסננות נתונים, זכור כי WHERE פועל בשורות המוחזרות על-ידי משפט FROM. אם קבוצה לפי ... מקטע HAVING קיים בשאילתה שלך לאחר פסוקית WHERE, משפט WHERE ילסנן שורות לפני עיבוד GROUP BY - שעשוי להגביל את הקבוצות שניתן ליצור.

פסוקית HAVING מעובדת לאחר GROUP BY והיא פועלת רק בקבוצות, ולא בשורות פירוט. כדי לסכם:

  • משפט WHERE מסנן שורות לפני יצירת קבוצות כלשהן
  • משפט HAVING מסנן קבוצות שלמות, וברוב כלל בודק את התוצאות של צבירה.