دستور GROUP BY در SQL Server
دستور GROUP BY در SQL Server برای گروهبندی دادههای مشابه و محاسبه توابعی مانند SUM، COUNT و AVG استفاده میشود.
دستور GROUP BY در SQL Server
دستور GROUP BY یکی از پرکاربردترین دستورات در SQL Server است که برای گروهبندی دادهها و انجام محاسبات آماری روی رکوردهای مشابه استفاده میشود.
این دستور معمولاً همراه با توابع تجمعی (Aggregate Functions) مانند COUNT، SUM، AVG، MIN و MAX به کار میرود تا اطلاعات خلاصه و گزارشهای مدیریتی از دادههای موجود در پایگاه داده استخراج شود.
در بسیاری از سیستمهای نرمافزاری، از جمله سیستمهای فروش، حسابداری، منابع انسانی و انبارداری، نیاز است دادهها بر اساس یک یا چند ستون دستهبندی شوند.
در چنین شرایطی، GROUP BY بهترین ابزار برای سازماندهی و تحلیل اطلاعات محسوب میشود.
مفهوم GROUP BY در SQL Server
فرض کنید جدولی از سفارشات فروش دارید که شامل نام مشتری و مبلغ سفارش است.
اگر بخواهید مجموع خرید هر مشتری را مشاهده کنید، باید رکوردهای مربوط به هر مشتری را در یک گروه قرار دهید و سپس مجموع مبالغ را محاسبه کنید.
ساختار کلی دستور:
SELECT ColumnName, AggregateFunction(ColumnName)
FROM TableName
GROUP BY ColumnName;
ایجاد جدول نمونه
فرض کنید جدول زیر را داریم:
CREATE TABLE Orders
(
OrderID INT,
CustomerName NVARCHAR(50),
Amount DECIMAL(18,2)
);
نمونه دادهها:
INSERT INTO Orders VALUES
(1,'علی',500),
(2,'رضا',300),
(3,'علی',700),
(4,'مریم',400),
(5,'رضا',200);
محتوای جدول:
| Amount | CustomerName | OrderID |
| 1 | علی | 500 |
| 2 | رضا | 300 |
| 3 | علی | 700 |
| 4 | مریم | 400 |
| 5 | رضا | 200 |
استفاده از GROUP BY در SQL Server
برای محاسبه مجموع خرید هر مشتری:
SELECT CustomerName,
SUM(Amount) AS TotalPurchase
FROM Orders
GROUP BY CustomerName;
نتیجه:
| TotalPurchase | CustomerName |
| علی | 1200 |
| رضا | 500 |
| مریم | 400 |
در این مثال SQL Server تمام رکوردهای دارای نام یکسان را در یک گروه قرار داده و سپس مجموع مبالغ را محاسبه کرده است.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
⇐همین حالا شروع کنید و به دنیای دادهها بپیوندید!
استفاده از COUNT همراه GROUP BY در SQL Server
تابع COUNT تعداد رکوردهای هر گروه را محاسبه میکند.
SELECT CustomerName,
COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerName;
خروجی:
| OrderCount | CustomerName |
| علی | 2 |
| رضا | 2 |
| مریم | 1 |
این گزارش تعداد سفارشهای ثبت شده توسط هر مشتری را نشان میدهد.
استفاده از AVG در SQL Server
برای محاسبه میانگین مبلغ سفارش هر مشتری:
SELECT CustomerName,
AVG(Amount) AS AverageAmount
FROM Orders
GROUP BY CustomerName;
نتیجه:
| AverageAmount | CustomerName |
| علی | 600 |
| رضا | 250 |
| مریم | 400 |
استفاده از MAX در SQL Server
برای نمایش بیشترین مبلغ سفارش هر مشتری:
SELECT CustomerName,
MAX(Amount) AS MaxOrder
FROM Orders
GROUP BY CustomerName;
استفاده از MIN در SQL Server
برای مشاهده کمترین سفارش هر مشتری:
SELECT CustomerName,
MIN(Amount) AS MinOrder
FROM Orders
GROUP BY CustomerName;
گروهبندی بر اساس چند ستون در SQL Server
GROUP BY میتواند روی چند ستون نیز اعمال شود.
فرض کنید جدول فروش دارای ستون شهر باشد:
SELECT City,
CustomerName,
SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY City, CustomerName;
در این حالت دادهها ابتدا بر اساس شهر و سپس بر اساس نام مشتری گروهبندی میشوند.
قوانین GROUP BY در SQL Server
هنگام استفاده از GROUP BY باید به چند نکته مهم توجه کرد:
قانون اول
تمام ستونهایی که در بخش SELECT قرار دارند و تابع تجمعی روی آنها اعمال نشده است، باید در GROUP BY نیز وجود داشته باشند.
نمونه اشتباه:
SELECT CustomerName,
Amount
FROM Orders
GROUP BY CustomerName;
خطا:
Column 'Amount' is invalid in the select list
نمونه صحیح:
SELECT CustomerName,
SUM(Amount)
FROM Orders
GROUP BY CustomerName;
GROUP BY و WHERE در SQL Server
ابتدا WHERE اجرا میشود و سپس GROUP BY.
مثال:
SELECT CustomerName,
SUM(Amount)
FROM Orders
WHERE Amount > 300
GROUP BY CustomerName;
در اینجا فقط سفارشهای بالای 300 در محاسبات لحاظ میشوند.
استفاده از HAVING در SQL Server
WHERE روی رکوردها اعمال میشود اما HAVING روی گروهها.
مثال:
SELECT CustomerName,
SUM(Amount) AS TotalAmount
FROM Orders
GROUP BY CustomerName
HAVING SUM(Amount) > 500;
خروجی:
| TotalAmount | CustomerName |
| علی | 1200 |
تنها مشتریانی نمایش داده میشوند که مجموع خریدشان بیشتر از 500 باشد.
تفاوت WHERE و HAVING در SQL Server
| ویژگی | HAVING | WHERE |
| قبل از GROUP BY اجرا میشود | بله | خیر |
| بعد از GROUP BY اجرا میشود | خیر | بله |
| روی رکوردها اعمال میشود | بله | خیر |
| روی گروهها اعمال میشود | خیر | بله |
مثال:
SELECT CustomerName,
SUM(Amount)
FROM Orders
WHERE Amount > 100
GROUP BY CustomerName
HAVING SUM(Amount) > 500;
GROUP BY با تاریخ در SQL Server
یکی از کاربردهای مهم GROUP BY تهیه گزارشهای روزانه و ماهانه است.
SELECT YEAR(OrderDate) AS OrderYear,
SUM(Amount) AS TotalSales
FROM Orders
GROUP BY YEAR(OrderDate);
گزارش فروش سالانه تولید میشود.
گزارش فروش ماهانه
SELECT MONTH(OrderDate) AS MonthNumber,
SUM(Amount) AS TotalSales
FROM Orders
GROUP BY MONTH(OrderDate);
GROUP BY با چند تابع تجمعی
امکان استفاده همزمان از چندین تابع وجود دارد.
SELECT CustomerName,
COUNT(*) AS OrderCount,
SUM(Amount) AS TotalSales,
AVG(Amount) AS AverageSales,
MAX(Amount) AS MaxSales,
MIN(Amount) AS MinSales
FROM Orders
GROUP BY CustomerName;
این نوع گزارش در سیستمهای مدیریتی بسیار رایج است.
استفاده از ORDER BY همراه GROUP BY
برای مرتبسازی نتایج:
SELECT CustomerName,
SUM(Amount) AS TotalAmount
FROM Orders
GROUP BY CustomerName
ORDER BY TotalAmount DESC;
نتایج از بیشترین فروش به کمترین مرتب میشوند.
GROUP BY و JOIN در SQL Server
معمولاً GROUP BY همراه JOIN استفاده میشود.
مثال:
SELECT C.CustomerName,
SUM(O.Amount) AS TotalAmount
FROM Customers C
INNER JOIN Orders O
ON C.CustomerID = O.CustomerID
GROUP BY C.CustomerName;
این کوئری مجموع خرید هر مشتری را از دو جدول مختلف محاسبه میکند.
GROUP BY با CASE در SQL Server
گاهی نیاز داریم دادهها را دستهبندی کنیم.
SELECT
CASE
WHEN Amount >= 500 THEN 'زیاد'
ELSE 'کم'
END AS SaleType,
COUNT(*) AS TotalOrders
FROM Orders
GROUP BY
CASE
WHEN Amount >= 500 THEN 'زیاد'
ELSE 'کم'
END;
GROUP BY ROLLUP در SQL Server
ROLLUP برای ایجاد جمعهای میانی و جمع کل استفاده میشود.
SELECT CustomerName,
SUM(Amount)
FROM Orders
GROUP BY ROLLUP(CustomerName);
نتیجه شامل جمع کل نیز خواهد بود.
GROUP BY CUBE در SQL Server
CUBE تمام ترکیبهای ممکن گروهبندی را ایجاد میکند.
SELECT Region,
ProductCategory,
SUM(SalesAmount)
FROM Sales
GROUP BY CUBE(Region, ProductCategory);
این قابلیت در تحلیلهای پیشرفته داده بسیار کاربردی است.
مزایای GROUP BY در SQL Server
-
تهیه گزارشهای مدیریتی
-
خلاصهسازی دادهها
-
افزایش سرعت تحلیل اطلاعات
-
محاسبه آمارهای مختلف
-
دستهبندی دادهها
-
امکان استفاده همراه توابع تجمعی
-
مناسب برای داشبوردهای مدیریتی

نکات بهینهسازی GROUP BY
-
استفاده از ایندکس
اگر ستون گروهبندی دارای Index باشد، سرعت اجرای کوئری افزایش مییابد.
CREATE INDEX IX_CustomerName
ON Orders(CustomerName);
-
کاهش حجم دادهها با WHERE
SELECT CustomerName,
SUM(Amount)
FROM Orders
WHERE OrderDate >= '2026-01-01'
GROUP BY CustomerName;
-
اجتناب از گروهبندی روی ستونهای غیرضروری
هرچه تعداد ستونهای GROUP BY بیشتر باشد، هزینه پردازش نیز افزایش پیدا میکند.
جمعبندی
دستور GROUP BY در SQL Server یکی از مهمترین ابزارها برای تحلیل و خلاصهسازی دادهها است.
این دستور امکان گروهبندی رکوردهای مشابه و استفاده از توابع تجمعی مانند SUM، COUNT، AVG، MIN و MAX را فراهم میکند.
همچنین میتوان آن را همراه با WHERE، HAVING، ORDER BY، JOIN، ROLLUP و CUBE به کار برد تا گزارشهای حرفهای و مدیریتی تولید شوند.
تسلط بر GROUP BY برای هر توسعهدهنده یا مدیر پایگاه داده ضروری است، زیرا بخش بزرگی از گزارشگیریها و تحلیلهای اطلاعاتی در SQL Server بر پایه این دستور انجام میشود.



کاربران ما
شما هم نظرتون با ما دریاره “دستور GROUP BY در SQL Server” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید