جهت مشاهده نتایج و تست کوئری ها از ادیتور آنلاین استفاده کنید (کلیک کنید).

GROUP BY دستور

  • دستور GROUP BY تمام سطرهایی که مقدار یکسانی در ستون مشخص شده دارند را تجمیع میکند.

  • معمولا در استفاده از دستور GROUP BY از توابع تجمیعی COUNTMAXMINSUMAVG  استفاده میکنند.
  • نحوه استفاده از دستور GROUP BY:

SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s)

  • مثال:

در مثال زیر تعداد CustomerIDهایی که شهرشان یکی است را میشمارد و تعدادشان را کنار نام شهرشان نمایش میدهد.

SELECT COUNT(CustomerID) AS CountCustomer, City FROM Customers GROUP BY City

نتیجه:

City CountCustomer
Tehran 3
Karaj 1
Tabriz 1
Isfahan 1
  • میتوانید برای نمایش نتیجه GROUP BY به صورت مرتب از ORDER BY استفاده کنید.

SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country ORDER BY COUNT(CustomerID) DESC

  • در JOIN نیز میتوانید از GROUP BY استفاده کنید.
  • در نمونه زیر از ادغام جداول Orders و Customers مقادیر CustomerName و  تعداد Order هایی که هر مشتری داشته است را واکشی میکنیم. 

SELECT Customers.CustomerName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID GROUP BY CustomerName

HAVING دستور

  • HAVING عملکرد مشابه WHERE را دارد ولی چون WHERE را نمیتوان برای توابع تجمعی استفاده کرد هنگام استفاده از توابع تجمعی برای اعمال شرط از HAVING استفاده میکنیم.

SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) HAVING condition ORDER BY column_name(s)

  • مثال:

در این مثال تعداد مشتریان هر شهر شمرده شده و مواردی که تعداد مشتریان بالای ۵ نفر باشد انتخاب میشوند و درنهایت تعداد مشتریان بالای ۵ نفر در کنار نام شهرشان به صورت نزولی چاپ میشوند.

SELECT COUNT(CustomerID), City FROM Customers GROUP BY City HAVING COUNT(CustomerID) > 5 ORDER BY COUNT(CustomerID) DESC

مثال:

در مثال زیر جدول های Employees و Orders ادغام شدند و مواردی که FirstName آنها Ali یا Zahra هستند واکشی شدند سپس بر روی جدول تولید شده تابع تجمیعی اعمال شد و تعداد Order های ثبت شده برای هر اسم محاسبه گردید و درنهایت مواردی که تعداد Orderهای آن ها بالای ۲۵ مورد باشد به صورت نام و تعداد مجموع Orderهای ثبت شده برای هر نام چاپ میشود.

SELECT Employees.FirstName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID WHERE FirstName = ‘Ali’ OR FirstName = ‘Zahra’ GROUP BY FirstName HAVING COUNT(Orders.OrderID) > 25

آموزش SQL

Scroll to Top