שפת השאילתות T-SQL של שרת SQL מציעה מגוון רחב של אפשרויות לאחזור נתונים. זה כולל את היכולת לשאול מסד נתונים של SQL, כמו גם פונקציית סכום, פונקצית כמות, וקיבוץ עמודות. המשפט GROUP BY של SQL יכול להשתמש בכל אחת מהיכולות הללו. במאמר זה, אני אראה לך כיצד ניתן להשתמש במשפט GROUP BY לבדו או בשילוב עם אחת מהפונקציות הכוללות כדי לבצע חישובים בהתבסס על הקיבוץ.
כיצד עובד משפט GROUP BY של SQL?
משפט GROUP BY של SQL משמש עם המשפט SELECT כדי לארגן נתונים לקבוצות של נתונים זהים. הוא עוקב אחרי המשפט WHERE במשפט SELECT.
משפט זה נעשה שימוש רב ביותר עם פונקציות כוללות כמו SUM, COUNT, AVG, MAX, או MIN, שמאפשרות לך לבצע חישובים עם נתונים מקובצים. ניתן לקבץ את הנתונים לפי כל סוג עמוד שונה כולל מספרים כמו מזהה מוצרים, תאריכים, או תווים כמו תיאורים.
תחביר ה-GROUP BY הבסיסי פשוט מאוד:
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;
פה, אתה יכול לראות את הפריט `GROUP BY` שמשתמשים בעוד שאימוץ בסיסי לבחינה `SELECT`. הבחינה `SELECT` משחזרת שתי עמודות, והעמודה השנייה משתמשת בפונקציית אינסופיה.
השימוש בפונקציית אינסופיה אינו דורש מדיוק על-ידי הפריט `GROUP BY`, אך זהו מעט נפוץ באגב לפריט זה. הליטוע יביא את המידע שבתוך העמודה הראשונה.
בואו נצליח לעודדר ולראות את הפריט `GROUP BY` בפעולה.
שימוש ב `GROUP BY` SQL ביחד עם בחינה `SELECT`
ראשית, בואו נסתכל על שימוש בפריט `GROUP BY` SQL בבחינה `SELECT` פשוטה בלי להוסיף פונקציית אינסופיה. הרשימה הבאה תוצאה ותעדה את עמודת ה `Product ID` מהטבלה SalesLT.SalesOrderDetail במאגר הדיגיטלי AdventureWorksLT2019שלנו.
USE AdventureWorksLT2019; SELECT ProductID FROM SalesLT.SalesOrderDetail GROUP BY ProductID;
זה בעיקרון משחזר רשימה של כל ה `ProductID` שהוזנחו, כפי שניתן לראות בתמונה הבאה.

שימוש ב `GROUP BY` SQL עם פונקציות אסטרגוגיות
זה יותר נפוץ להשתמש בעמודת השיחזור SQL ביחד עם אחד מהפונקציות האגרגורמיות שיכולות לספק ספקטר מספר, סכם, ממוצע או סיכום של כל העמודות שאתה קובע ביחד. ההצעה הבאה משתמשת בGROUP BY ביחד עם השיחזור של SalesLT.Product מהבסיס נתונים AdventureWorksLT2019 כדי למצוא את סכמת המוצרים בכל קטגוריית המוצרים:
USE AdventureWorksLT2019; SELECT ProductCategoryID, COUNT(*) AS TotalProducts FROM SalesLT.Product GROUP BY ProductCategoryID;
במקרה זה, ההצעה SELECT מחזירה את עמודת 'ProductCategoryID' משולשת SalesLT.Product, והיא מספקקת את ספקטר המספרים בכל קטגוריה בעזרת הפונקציית COUNT(*) האגרגורמית. כאן, העמודת הGROUP BY קובעת את התוצאות על פי 'ProductCategoryID' בעוד הפונקציית SELECT COUNT מחשבת את סכמת המוצרים בכל קטגוריה של המוצרים. תוצאות הפונקציית COUNT(*) משתמשות בעליית 'TotalProducts'.
תוצאות השאלה הזו מוצגות בדיוק בתמונה הבאה. הפלט מציג את סכמת המוצרים בכל קטגוריית המוצרים, כפי שמוערך בעזרת העמודה GROUP BY. המידע הסיכום נשאר על ידי הפונקציית COUNT(*) האגרגורמית.

שימוש בGROUP BY בסיס נתונים SQL עם עוד מספר עמודות
עמודת השיחזור SQL אינה מגבלת לעבודה עם עמודה בודדת. היא יכולה גם לעבוד עם עמודות רבות בו-זמנית באותה השאלה.
בואו נבחן דוגמה לשימוש בפסת הסיום GROUP BY עם שתי עמודות מהטבלה SalesLT.Product בבסיס נתונים AdventureWorksLT2019. השאלה הבאה מראה איך לשאת את מספר המוצרים הכללי לכל קטגורית וסוג של המוצר.
USE AdventureWorksLT2019; SELECT ProductCategoryID, ProductModelID, COUNT(*) AS TotalProducts FROM SalesLT.Product GROUP BY ProductCategoryID, ProductModelID;
כאן, עמודות 'ProductCategoryID' ו'ProductModelID' נשאית באותו זמן, ואנחנו משתמשים בפונקציית האינקובטיב COUNT(*) כדי לספק את מספר המוצרים בכל קטגורית ותת-קטגורית. במקרה זה, פסת הסיום GROUP BY מקבץ את תוצאות של שתי העמודות 'ProductCategoryID' ו'ProductModelID'. זה יוצר שתי קבוצות מיוחדות בהם מבוססות על שתי עמודות שונות.
ניתן לראות את תוצאות השאלה הזו בתמונה הבאה. התוצאות האלה מראות את מספר המוצרים וסוגי המוצרים והספקת את הסכמה הכללית בעזרת השמה המקלדת TotalProducts על העמודה.

בהשתמשות בפסת הסיום SQL GROUP BY עם בשורת HAVING
שימוש נפוץ בפסת הסיום GROUP BY הוא במילים של עמודת HAVING. למעשה, ניתן להשתמש בפסת הסיום GROUP BY עם בשורת HAVING כדי לסנן את תוצאות השאלה בהתבסס על תנאים שהבשורת HAVING מיישמה על הקבוצות המידעיות. התנאים יכולים להיות נוגעים לעמודה בסגנון מידע רגילה או לפונקציית האינקובטיב.
בואו נסתכל על דוגמא של שימוש בפרט של SQL GROUP BY ביחד עם פרט ה HAVING במאגר נתונים AdventureWorksLT2019. בדוגמה זו נראה אילו לקוחות הצטרפו להזמנים בטבלת SalesLT.SalesOrderHeader עם סך ההזמנים הכללי גדול מ $2000. כאן, הפריט GROUP BY משתמש לקבוצת ההזמנים על-פי לקוח, ואחר כך פריט HAVING סודר לקוחות על-פי סך ההזמנים הכללי.
USE AdventureWorksLT2019; SELECT c.CustomerID, c.FirstName, c.LastName, SUM(soh.TotalDue) AS TotalOrderAmount FROM SalesLT.Customer c JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.FirstName, c.LastName HAVING SUM(soh.TotalDue) > 2000;
- ברשימת הקוד הזו, הטבלה SalesLT.Customer מותווה עם הטבלה SalesLT.SalesOrderHeader בעזרת מאגר העמודים 'CustomerID'.
- הרשימת SELECT משחזרת 'CustomerID', 'FirstName', 'LastName', ו 'TotalOrderAmount'.
- פריט GROUP BY משתמש לקבוצת התוצאות על-פי לקוח.
- פונקציית הסכום SUM() מחשבת את סך ההזמנים הכללי עבור כל לקוח.
- פריט HAVING סודר את התוצאות הקבוצות רק לקבוצת לקוחות שסך ההזמנים הכללי שלהם גדול מ $2000.
ניתן לראות את תוצאות הרשימת הקוד הזו בתמונה הבאה:

שימוש ב SQL GROUP BY עם פריט ORDER BY
אתה יכול גם להשתמש בהגבלת GROUP BY ב-SQL עם ההגבלה ORDER BY כדי למיין את סט התוצאות לפי עמודות אחת או יותר. הדוגמה הבאה משתמשת במסד הנתונים AdventureWorksLT2019. כדי להמחיש את שימוש ההגבלה ORDER BY עם ההגבלה GROUP BY, תוכל פשוט לקחת את קוד הדוגמה הקודם ולהוסיף את ההגבלה ORDER BY כדי למיין את התוצאות ולהציג את סכומי ההזמנות הגדולים ביותר בסדר יורד.
USE AdventureWorksLT2019; SELECT c.CustomerID, c.FirstName, c.LastName, SUM(soh.TotalDue) AS TotalOrderAmount FROM SalesLT.Customer c JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.FirstName, c.LastName HAVING SUM(soh.TotalDue) > 2000 ORDER BY TotalOrderAmount DESC;
אתה יכול לראות את התוצאות בדימוי הבא. התוצאות מציגות את רשימת הלקוחות עם הזמנות מעל 2000 דולר בסדר יורד, עם הלקוחות שיש להם הזמנות הגדולות ביותר בראש הרשימה.

כפי שאתה רואה, ניתן לעשות הרבה דברים עם ההגבלה GROUP BY ב-SQL. מראה לך איך ניתן להשתמש בהגבלת GROUP BY עם עמודות מרובות, וכן כיצד ניתן להוסיף את ההגבלות HAVING ו-ORDER BY כדי לסנן ולמיין את התוצאות.
כרגיל, אל תהסס לשאול שאלות נוספות על ההגבלה GROUP BY ב-SQL. ואם ברצונך ללמוד עוד על SQL Server, תרגיש חופשי לבדוק את המאמרים הקודמים בסדרתי SQL Server Essential.
Source:
https://petri.com/sql-group-by/