GROUPING SETS در SQL به شما این امکان را میدهد تا نتایج یک پرس و جو را در گروههای مختلف بر اساس ستونهای خاص گروه بندی کنید. این میتواند برای دستیابی به سطوح مختلف جمع در یک پرس و جو مفید باشد.
در اینجا یک مثال جامع از استفاده از GROUPING SETS در SQL آورده شده است:
فرض کنید جدولی به نام Sales با ستونهای ProductID، CategoryName، SalesPersonID و SalesAmount دارید. میخواهید مجموع فروش را برای هر ترکیبی از CategoryName و SalesPersonID، و همچنین مجموع کل فروش برای هر CategoryName و کل فروش کلی را مشاهده کنید.
پرس و جوی SQL با GROUPING SETS:
SQL
SELECT
GROUPING_SETS(CategoryName, SalesPersonID),
CategoryName,
SalesPersonID,
SUM(SalesAmount) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS (CategoryName, CategoryName, SalesPersonID);
توضیح:
- این پرس و جو از
GROUPING SETSبرای تعریف سه سطح گروه بندی استفاده میکند:CategoryName: این سطح فقط بر اساسCategoryNameگروه بندی میکند.CategoryName, SalesPersonID: این سطح بر اساس هر دوCategoryNameوSalesPersonIDگروه بندی میکند.- (): گروه بندی خالی نشان دهنده جمع کل برای کل جدول است.
GROUP BY GROUPING SETS (CategoryName, CategoryName, SalesPersonID): این قسمت به SQL میگوید که از تعاریف گروه بندی مشخص شده درGROUPING SETSاستفاده کند.- سایر قسمتهای پرس و جو مانند
SELECTوSUMمشابه سایر پرس و جوهای گروه بندی باGROUP BYهستند.
نتیجه:
این پرس و جو خروجی زیر را برمیگرداند:
| CategoryName | SalesPersonID | TotalSales |
|---|---|---|
| Total | NULL | 1000.00 |
| Electronics | NULL | 500.00 |
| Clothing | NULL | 300.00 |
| Electronics | 1 | 200.00 |
| Electronics | 2 | 300.00 |
| Clothing | 3 | 300.00 |
همانطور که مشاهده میکنید، خروجی شامل مجموع فروش برای هر سطح گروه بندی است. ردیف اول با CategoryName برابر با “Total” و SalesPersonID برابر با NULL، کل فروش را نشان میدهد. ردیفهای بعدی مجموع فروش را برای هر CategoryName و هر ترکیبی از CategoryName و SalesPersonID نشان میدهند.
نکات:
- میتوانید از چندین سطح گروه بندی در
GROUPING SETSاستفاده کنید. - میتوانید از توابع تجمعی دیگری مانند
AVG،MINوMAXبه جایSUMاستفاده کنید. - میتوانید از نام مستعار برای ستونهای گروه بندی شده در clause
SELECTاستفاده کنید.
مزایای استفاده از GROUPING SETS:
- خوانایی بیشتر کد نسبت به استفاده از UNION ALL برای دستیابی به همان نتیجه.
- کارایی بهتر نسبت به استفاده از UNION ALL در برخی موارد.



