کاربرد group by در SQL
توابع Aggregate غالباً با عبارت GROUP BY همراه می شوند.
عبارت GROUP BY
عبارت GROUP BY در ترکیب با توابع aggregate استفاده می شود تا نتیجه را بر اساس یک یا چند ستون گروه بندی کند.
فرم دستور GROUP BY:
FROM table_name
WHERE column_name operator value
GROUP BY column_name
مثال:
جدول Orders را در زیر داریم:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
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 برای گروه بندی مشتریان استفاده کنیم.
از دستور زیر استفاده می کنیم:
GROUP BY Customer
نتیجه به شکل زیر خواهد بود:
Customer | SUM(OrderPrice) |
---|---|
Hansen | 2000 |
Nilsen | 1700 |
Jensen | 2000 |
جالب بود! این طور نیست؟
بگذارید ببینیم چه اتفاقی می افتد اگر عبارت GROUP BY را حذف کنیم:
نتیجه به شکل زیر خواهد بود:
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 را برای بیش از یک ستون استفاده کنیم، به شکل زیر:
GROUP BY Customer,OrderDate
کوئری بالا، مجموع سفارشات هر یک از مشتریان در یک روز نمایش خواهد داد، مثلاً اگر آقای Hansen در یک روز بیش از یکبار از فروشگاه خرید کرده باشد، مجموع آنها را خروجی خواهیم دید.
برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه دادهSQLServer کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 51073
دیدگاهها
مشکل برطرف شد حتما باید از as برای نام ستون استفاده بشه.
مثال
GROUP BY برای بیش از یک ستون
ناقصه
با تشکر، آخرین مثال Group By اصلاح شد.