"

دستور GROUP BY در SQL Server,استفاده از GROUP BY در SQL Server,قوانین GROUP BY در SQL Server

دستور GROUP BY در SQL Server

دستور GROUP BY در SQL Server برای گروه‌بندی داده‌های مشابه و محاسبه توابعی مانند SUM، COUNT و AVG استفاده می‌شود.

تیم تحریریه
4
0
30 خرداد 1405
لینک کوتاه

دستور GROUP BY در SQL Server

دستور GROUP BY یکی از پرکاربردترین دستورات در SQL Server است که برای گروه‌بندی داده‌ها و انجام محاسبات آماری روی رکوردهای مشابه استفاده می‌شود.
این دستور معمولاً همراه با توابع تجمعی (Aggregate Functions) مانند COUNT، SUM، AVG، MIN و MAX به کار می‌رود تا اطلاعات خلاصه و گزارش‌های مدیریتی از داده‌های موجود در پایگاه داده استخراج شود.

در بسیاری از سیستم‌های نرم‌افزاری، از جمله سیستم‌های فروش، حسابداری، منابع انسانی و انبارداری، نیاز است داده‌ها بر اساس یک یا چند ستون دسته‌بندی شوند.
در چنین شرایطی، GROUP BY بهترین ابزار برای سازماندهی و تحلیل اطلاعات محسوب می‌شود.


دستور GROUP BY در SQL Server



مفهوم 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 در 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

جمع‌بندی

دستور GROUP BY در SQL Server یکی از مهم‌ترین ابزارها برای تحلیل و خلاصه‌سازی داده‌ها است.
این دستور امکان گروه‌بندی رکوردهای مشابه و استفاده از توابع تجمعی مانند SUM، COUNT، AVG، MIN و MAX را فراهم می‌کند.
همچنین می‌توان آن را همراه با WHERE، HAVING، ORDER BY، JOIN، ROLLUP و CUBE به کار برد تا گزارش‌های حرفه‌ای و مدیریتی تولید شوند.
تسلط بر GROUP BY برای هر توسعه‌دهنده یا مدیر پایگاه داده ضروری است، زیرا بخش بزرگی از گزارش‌گیری‌ها و تحلیل‌های اطلاعاتی در SQL Server بر پایه این دستور انجام می‌شود.

محصولات مرتبط

کاربران ما

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

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو