گروه مقاله : SQL Server
تاريخ انتشار : 1394/02/08 - 11:01
كد :295

گروه بندی داده ها (SQL GROUP BY)

توابع Aggregate غالباً با عبارت GROUP BY همراه می شوند.
عبارت GROUP BY :
عبارت GROUP BY در ترکیب با توابع aggregate استفاده می شود تا نتیجه را بر اساس یک یا چند ستون گروه بندی کند.
فرم دستور GROUP BY :
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
مثال :
جدول "Orders"را زیر داریم :
 
OrderID OrderDate OrderPrice Cutomer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen
 
می خواهیم مجموع سفارشات هر یک از مشتریان را به دست آوریم.
باید از عبارت GROUP BY برای گروه بندی مشتریان استفاده کنیم.
از دستور زیر استفاده می کنیم:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer;
 
نتیجه به شکل زیر خواهد بود:
 
Customer SUM(OrderPrice)
Hansen 2000
Nilsen 1700
Jensen 2000
 
جالب بود! این طور نیست؟
بگذارید ببینیم چه اتفاقی می افتد اگر عبارت GROUP BY را حذف کنیم:
SELECT Customer,SUM(OrderPrice) FROM Orders;
 
نتیجه به شکل زیر خواهد بود:
 
 
Customer SUM(OrderPrice)
Hansen 5700
Nilsen 5700
Hansen 5700
Hansen 5700
Jensen 5700
Nilsen 5700

 

نتیجه فوق آن چیزی نیست که ما می خواهیم .
توضیح اینکه چرا دستور SELECT فوق نمی تواند مورد استفاده قرار گیرد:
دستور SELECT فوق دو ستون (Customer و SUM(OrderPrice را مشخص کرده است، ستون (SUM(OrderPrice تنها یک مقدار را بر می گرداند که جمع کل مقادیر ستون OrderPrice است، در حالیکه ستون Customer شش مقدار را بر می گرداند. بنابراین این دستور نتیجه درستی به ما نمی دهد. اما همان طور که می بینید با اضافه کردن عبارت GROUP BY این مشکل حل می شود.
GROUP BY برای بیش از یک ستون :
می توانیم عبارت GROUP BY را برای بیش از یک ستون استفاده کنیم، به شکل زیر:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY;
نظرات كاربران :