ایس کیو ال GROUP BY جملات
- صفحه قبل SQL sum()
- صفحه بعدی SQL Having
مجموعی فانکشن (مثلاً SUM) GROUP BY جملہ کو اضافہ کرنا ضروری ہوتا ہے۔
GROUP BY جملہ
GROUP BY جملہ، مجموعی فانکشنوں کو متحد کرنے کے لئے استعمال کی جاتی ہے، ایک یا کثیر تر ستونوں کی بنیاد پر نتائج کا گروپ بناتا ہے۔
SQL GROUP BY گرامر
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
SQL GROUP BY مثال
ہم اس "Orders" جدول کو رکھتے ہیں:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
حالا، ما میخواهیم مبلغ کل هر مشتری (کل سفارش) را پیدا کنیم.
ما میخواهیم از جمله GROUP BY برای ترکیب مشتریان استفاده کنیم.
ما از جمله SQL زیر استفاده میکنیم:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
نتایج بالا مانند این است:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
بسیار خوب است، نه؟
بیایید ببینیم اگر GROUP BY را حذف کنیم چه اتفاقی میافتد:
SELECT Customer,SUM(OrderPrice) FROM Orders
نتایج بالا مانند این است:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
نتایج بالا به دلخواه ما نیست.
پس چرا نمیتوانیم از این جمله SELECT استفاده کنیم؟ توضیح زیر: جمله SELECT دو ستون را مشخص کرده است (Customer و SUM(OrderPrice)). "SUM(OrderPrice)" یک مقدار جداگانه را برمیگرداند (总计 ستون "OrderPrice"), در حالی که "Customer" شش مقدار را برمیگرداند (هر مقدار برای هر ردیف در جدول "Orders"). بنابراین نمیتوانیم نتیجه درست را دریافت کنیم. اما، شما دیدید که جمله GROUP BY این مشکل را حل میکند.
GROUP BY یک یا چند ستون
ما میتوانیم به یک یا چند ستون نیز GROUP BY جمله را اعمال کنیم، مانند این:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
- صفحه قبل SQL sum()
- صفحه بعدی SQL Having