خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
استفاده از GROUP BY در SQL Server
در اس کیو ال سرور، عبارت GROUP BY برای ترتیب و نمایش داده های یکسان در گروه ها با کمک Aggregate function ها استفاده می شود. در واقع ردیف هایی که دارای مقادیر یکسان هستند بطور خلاصه در یک ردیف نشان می دهد(به عنوان مثال یافتن تعداد مشتریان هر استان یا هر کشور).
عبارت GROUP BY معمولاً با aggregate function مانند(COUNT ، MAX ، MIN ، SUM ، AVG) برای گروه بندی مجموعه نتایج توسط یک یا چند ستون استفاده می شود.
Syntax استفاده از GROUP BY بصورت زیر می باشد:
COLUMN_1 و COLUMN_2 و … در یک aggregate function خلاصه نشده اند و در GROUP BY باید گنجانده شوند. اگر نیاز به وجود شرطی در کوئری داشته باشیم، از WHERE استفاده می کنیم و ORDER BY برای نمایش صعودی یا نزولی رکوردها مورد استفاده قرار می گیرد که اولا اختیاری بوده و ثانیا به صورت پیشفرض به صورت صعودی رکوردها را نمایش می دهد.
خب، در ادامه کار با نحوه استفاده از Group By آشنا خواهیم شد. برای این منظور یک جدول ایجاد کرده و مقادیری را در آن اضافه می کنیم. لطفا به نام فیلدها و به مقادیری مه در آنها insert می شود، دقت کنید که در ادامه کار بدانها مراجعه خواهیم کرد.
همانطور که مشاهده می کنید تعداد کل مقدار خریداری شده در هر ماه و سال بصورت نزولی یا desc نمایش داده شده است.
عبارت GROUP BY معمولاً با aggregate function مانند(COUNT ، MAX ، MIN ، SUM ، AVG) برای گروه بندی مجموعه نتایج توسط یک یا چند ستون استفاده می شود.
Syntax استفاده از GROUP BY بصورت زیر می باشد:
SELECT COLUMN_1, COLUMN_2, .., AGGREGATE_FUNCTION (COLUMN_NAME)
FROM TABLE_NAME [WHERE CONDITION]
GROUP BY COLUMN_1, COLUMN_2, ..,
ORDER BY ASC|DESC
COLUMN_1 و COLUMN_2 و … در یک aggregate function خلاصه نشده اند و در GROUP BY باید گنجانده شوند. اگر نیاز به وجود شرطی در کوئری داشته باشیم، از WHERE استفاده می کنیم و ORDER BY برای نمایش صعودی یا نزولی رکوردها مورد استفاده قرار می گیرد که اولا اختیاری بوده و ثانیا به صورت پیشفرض به صورت صعودی رکوردها را نمایش می دهد.
خب، در ادامه کار با نحوه استفاده از Group By آشنا خواهیم شد. برای این منظور یک جدول ایجاد کرده و مقادیری را در آن اضافه می کنیم. لطفا به نام فیلدها و به مقادیری مه در آنها insert می شود، دقت کنید که در ادامه کار بدانها مراجعه خواهیم کرد.
CREATE TABLE dbo.ITEM_DETAILS (
ID INT NOT NULL, ITEM VARCHAR(50), ITEM_QTY INT, ITEM_PURCHASED_DATE DATETIME)
INSERT INTO dbo.ITEM_DETAILS (ID, ITEM, ITEM_QTY, ITEM_PURCHASED_DATE)
VALUES (1, 'Scanner', 300, '2019-12-01 00:00:00.000'),
(2, 'Scanner', 250, '2019-12-10 00:00:00.000'),
(3, 'Scanner', 110, '2019-11-12 00:00:00.000'),
(4, 'Scanner', 110, '2019-09-19 00:00:00.000'),
(5, 'Scanner', 280, '2019-09-25 00:00:00.000'),
(6, 'Scanner', 180, '2019-08-15 00:00:00.000'),
(7, 'Scanner', 180, '2019-07-08 00:00:00.000'),
(8, 'Pen Drive', 360, '2019-12-15 00:00:00.000'),
(9, 'Pen Drive', 270, '2019-09-11 00:00:00.000'),
(10, 'Pen Drive', 210 ,'2019-08-22 00:00:00.000'),
(11, 'Pen Drive', 190 ,'2019-08-19 00:00:00.000'),
(12, 'Pen Drive', 480 ,'2019-07-15 00:00:00.000'),
(13, 'Pen Drive', 680, '2019-06-25 00:00:00.000'),
(14, 'Pen Drive', 120, '2019-06-18 00:00:00.000'),
(15, 'Hard Disk', 270, '2019-09-19 00:00:00.000'),
(16, 'Hard Disk', 210, '2019-08-12 00:00:00.000'),
(17, 'Hard Disk', 190, '2019-08-29 00:00:00.000'),
(18, 'Hard Disk', 480, '2019-07-25 00:00:00.000'),
(19, 'Hard Disk', 680, '2019-06-15 00:00:00.000'),
(20, 'Hard Disk', 120, '2019-06-28 00:00:00.000')
GROUP BY With Aggregate Functions
GROUP BY With SUM
مثلا با استفاده از با تابع SUM در Group By قصد داریم جمه کل خریدها را نشان دهیم:SELECT ITEM , SUM(ITEM_QTY) AS TOTAL_QTY
FROM dbo.ITEM_DETAILS
GROUP BY Item
GROUP BY WITH MAX()
نمایش آخرین تاریخ خریداری شده برای مورد خاص:SELECT ITEM, MAX(ITEM_PURCHASED_DATE) AS LAST_PURCHASED_DATE
FROM dbo.ITEM_DETAILS
GROUP BY ITEM
GROUP BY WITH MIN()
نمایش اولین تاریخ خریداری شده برای موردی خاص:SELECT ITEM, MIN(ITEM_PURCHASED_DATE) AS FIRST_PURCHASED_DATE
FROM dbo.ITEM_DETAILS
GROUP BY ITEM
GROUP BY WITH COUNT()
نمایش تعداد کل رکوردها برای هر آیتم یا کالا در جدول:SELECT ITEM, COUNT(ID) AS Cnt
FROM dbo.ITEM_DETAILS
GROUP BY ITEM
GROUP BY WITH AVG()
نمایش مقدار متوسط خریداری شده برای هر آیتم یا کالا:SELECT ITEM, AVG(ITEM_QTY) AS AVG_QTY
FROM dbo.ITEM_DETAILS
GROUP BY ITEM
Lets take few more complex queries using GROUP BY
نمایش مقدار کل خریداری شده را در هر ماه - سالانه و مرتب سازی بر اساس ماه و سال به صورت نزولی:SELECT MONTH(ITEM_PURCHASED_DATE) AS MONTH, YEAR(ITEM_PURCHASED_DATE) AS YEAR,
SUM(ITEM_QTY) AS TTL_QTY
FROM dbo.ITEM_DETAILS
GROUP BY MONTH(ITEM_PURCHASED_DATE), YEAR(ITEM_PURCHASED_DATE)
ORDER BY YEAR(ITEM_PURCHASED_DATE) DESC, MONTH(ITEM_PURCHASED_DATE) DESC
همانطور که مشاهده می کنید تعداد کل مقدار خریداری شده در هر ماه و سال بصورت نزولی یا desc نمایش داده شده است.
Multiple aggregation with GROUP By clause
نمایش مقدار کل ، تعداد ، مقدار متوسط ، اولین و آخرین تاریخ خریداری شده برای مورد یا آیتم خاص:SELECT ITEM,
MIN(ITEM_PURCHASED_DATE) AS FIRST_PURCHASED_DATE,
MAX(ITEM_PURCHASED_DATE) AS LAST_PURCHASED_DATE,
SUM(ITEM_QTY) AS TOTAL_QTY,
COUNT(ID) AS COUNT,
AVG(ITEM_QTY) AS AVG_QTY
FROM dbo.ITEM_DETAILS
GROUP BY ITEM
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: