וובמאסטר - תיכנות ובניית אתרים

מדריך SQL‏ - GROUP BY & HAVING

entry/‏ 5 ינואר, 2003
F+
F-
פונקציות צבירה, כמו COUNT, SUM, AVG וכד', מחזירות את תוצאת החישוב על כל העמודות בטבלה. על מנת לאפשר לנו לבצע חישובים אלו על קבוצות מסויימות, נוצרה פונקציית GROUP BY.


לדוגמא, כיצד נציג, עבור כל סופר, את כמות הספרים שכתב?
אם נכתוב:

SELECT COUNT(Title)
FROM Titles 
נקבל את סה"כ הספרים בטבלה.

השאילתה

SELECT Author,COUNT(Title)
FROM Titles, Authors, Title_Author
WHERE Titles.ISBN = Title_Author.ISBN
    AND Authors.AU_ID = Title_Author.AU_ID
תיתן לנו שגיאה, כי בשורת ה-SELECT ביקשנו להציג את העמודה Author, אך לא ציינו לפי מה לבצע את ה-COUNT

לכן, הדרך הנכונה לכתוב זאת היא:

SELECT Author,COUNT(Title)
FROM Titles, Authors, Title_Author
WHERE Titles.ISBN = Title_Author.ISBN
    AND Authors.AU_ID = Title_Author.AU_ID
GROUP BY Author 
אם נוסיף גם פסוקית ORDER BY, נקבל רשימה של כל הסופרים וכמה ספרים כתב כל אחד, ממויינת לפי מס' הספרים:

SELECT Author,COUNT(Title)
FROM Titles, Authors, Title_Author 
WHERE Titles.ISBN = Title_Author.ISBN
    AND Authors.AU_ID = Title_Author.AU_ID
GROUP BY Author
ORDER BY Count(Title)
הערה: כל עמודה שאנו רוצים להציג בשאילתת SELECT הכוללת גם פונקציית צבירה, חייבת להופיע בפסוקית ה-GROUP BY.



HAVING

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

לדוגמא, כדי להציג לכל מו"ל את מספר הספרים שפירסם, נכתוב:

SELECT Name, COUNT(Titles.PubID)
FROM Titles, Publishers
WHERE Titles.PubID = Publishers.PubID
GROUP BY Name
ORDER BY COUNT(Titles.PubID)
אך אם נרצה להציג רק את אלו שהוציאו לאור לפחות 10 ספרים, נכתוב:

SELECT Name, COUNT(Titles.PubID)
FROM Titles, Publishers
WHERE Titles.PubID = Publishers.PubID
GROUP BY Name
HAVING COUNT(Titles.PubID)>=10
ORDER BY COUNT(Titles.PubID)

entry

סטודיו לבניית אתרים שהוקם בינואר 2005
אתר: http://www.entry.co.il
תגיות: SQL‏  /  מדריך‏  /  DB‏  /  Database‏  /  בסיס נתונים‏  /  GROUP BY‏  /  HAVING‏  

תגובות בפייסבוק

תגובות למאמר



תגיות פופולאריות

X
הצטרף לעמוד שלנו בפייסבוק להישאר מעודכן!
וובמאסטר © כל הזכויות שמורות