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 | ۱۰۰۰.۰۰ |
Electronics | NULL | ۵۰۰.۰۰ |
Clothing | NULL | ۳۰۰.۰۰ |
Electronics | ۱ | ۲۰۰.۰۰ |
Electronics | ۲ | ۳۰۰.۰۰ |
Clothing | ۳ | ۳۰۰.۰۰ |
همانطور که مشاهده میکنید، خروجی شامل مجموع فروش برای هر سطح گروه بندی است. ردیف اول با CategoryName
برابر با “Total” و SalesPersonID
برابر با NULL
، کل فروش را نشان میدهد. ردیفهای بعدی مجموع فروش را برای هر CategoryName
و هر ترکیبی از CategoryName
و SalesPersonID
نشان میدهند.
نکات:
- میتوانید از چندین سطح گروه بندی در
GROUPING SETS
استفاده کنید. - میتوانید از توابع تجمعی دیگری مانند
AVG
،MIN
وMAX
به جایSUM
استفاده کنید. - میتوانید از نام مستعار برای ستونهای گروه بندی شده در clause
SELECT
استفاده کنید.
مزایای استفاده از GROUPING SETS:
- خوانایی بیشتر کد نسبت به استفاده از UNION ALL برای دستیابی به همان نتیجه.
- کارایی بهتر نسبت به استفاده از UNION ALL در برخی موارد.