الگوریتم اول

لطفا صبر کنید...

در SQL، دستور GROUP BY برای گروه‌بندی داده‌ها براساس یک یا چند ستون استفاده می‌شود. این دستور به شما این امکان را می‌دهد که داده‌ها را بر اساس مقادیر مشترک در یک یا چند ستون گروه‌بندی کرده و سپس از توابع جمعی (مثل COUNT، SUM، AVG، MIN، MAX) برای محاسبه و تحلیل داده‌ها در هر گروه استفاده کنید.

1. ساختار کلی دستور GROUP BY:

SELECT ستون1, ستون2, ..., تابع جمعی(ستون)
FROM جدول
WHERE شرایط
GROUP BY ستون1, ستون2, ...;

در اینجا:

  • ستون‌ها: ستون‌هایی هستند که می‌خواهید داده‌ها را بر اساس آن‌ها گروه‌بندی کنید.
  • تابع جمعی: توابعی مانند COUNT، SUM، AVG، MIN، MAX که معمولاً همراه با GROUP BY برای انجام محاسبات روی هر گروه از داده‌ها استفاده می‌شوند.
  • WHERE: اختیاری است و برای اعمال فیلتر قبل از گروه‌بندی داده‌ها استفاده می‌شود.

2. مثال‌های استفاده از GROUP BY:

الف. گروه‌بندی بر اساس یک ستون:

فرض کنید جدولی به نام فاکتورها داریم که شامل اطلاعات فاکتورها مانند شهر و قیمت است. اگر بخواهیم مجموع قیمت‌ها را برای هر شهر محاسبه کنیم، از دستور GROUP BY به صورت زیر استفاده می‌کنیم:

SELECT شهر, SUM(قیمت) AS مجموع_قیمت
FROM فاکتورها
GROUP BY شهر;

در اینجا:

  • داده‌ها بر اساس ستون شهر گروه‌بندی می‌شوند.
  • برای هر گروه (هر شهر)، مجموع قیمت‌ها محاسبه می‌شود.

ب. گروه‌بندی بر اساس چند ستون:

فرض کنید جدولی به نام فاکتورها داریم که شامل ستون‌های شهر، تاریخ و قیمت است. اگر بخواهیم مجموع قیمت‌ها را برای هر ترکیب از شهر و تاریخ محاسبه کنیم، می‌توانیم از GROUP BY با چند ستون استفاده کنیم:

SELECT شهر, تاریخ, SUM(قیمت) AS مجموع_قیمت
FROM فاکتورها
GROUP BY شهر, تاریخ;

در اینجا:

  • داده‌ها ابتدا بر اساس ستون شهر و سپس بر اساس ستون تاریخ گروه‌بندی می‌شوند.
  • برای هر ترکیب از شهر و تاریخ، مجموع قیمت‌ها محاسبه می‌شود.

ج. گروه‌بندی و فیلتر کردن با HAVING:

دستور HAVING برای فیلتر کردن نتایج گروه‌ها استفاده می‌شود. در حالی که دستور WHERE برای فیلتر کردن داده‌ها قبل از گروه‌بندی استفاده می‌شود، دستور HAVING برای اعمال فیلتر پس از گروه‌بندی و اعمال توابع جمعی است.

فرض کنید می‌خواهیم فقط شهرهایی را که مجموع قیمت آن‌ها بیشتر از 10,000 است نمایش دهیم:

SELECT شهر, SUM(قیمت) AS مجموع_قیمت
FROM فاکتورها
GROUP BY شهر
HAVING SUM(قیمت) > 10000;

در اینجا:

  • داده‌ها بر اساس شهر گروه‌بندی می‌شوند.
  • فقط گروه‌هایی که مجموع قیمت آن‌ها بیشتر از 10,000 باشد نمایش داده می‌شوند.

3. تفاوت GROUP BY با DISTINCT:

در حالی که دستور DISTINCT برای حذف مقادیر تکراری و نمایش فقط مقادیر یکتا از یک ستون استفاده می‌شود، دستور GROUP BY برای گروه‌بندی داده‌ها براساس یک یا چند ستون و انجام محاسبات روی آن‌ها با استفاده از توابع جمعی به کار می‌رود.

  • DISTINCT مقادیر یکتا را از یک ستون انتخاب می‌کند.
  • GROUP BY داده‌ها را بر اساس یک یا چند ستون گروه‌بندی می‌کند و سپس توابع جمعی را برای هر گروه محاسبه می‌کند.

مثال:

استفاده از DISTINCT برای یافتن شهرهای یکتا:

SELECT DISTINCT شهر FROM فاکتورها;

در مقابل، استفاده از GROUP BY برای گروه‌بندی داده‌ها:

SELECT شهر, COUNT(*) AS تعداد_فاکتورها FROM فاکتورها
GROUP BY شهر;

4. نکات مهم در استفاده از GROUP BY:

  • ستون‌هایی که در دستور SELECT استفاده می‌شوند و تابع جمعی ندارند، باید در دستور GROUP BY ذکر شوند.
  • دستور GROUP BY می‌تواند از چند ستون برای گروه‌بندی استفاده کند.
  • توابع جمعی مانند COUNT، SUM، AVG، MIN، MAX می‌توانند برای هر گروه محاسبه شوند.
  • دستور HAVING برای فیلتر کردن نتایج پس از اعمال توابع جمعی استفاده می‌شود، در حالی که WHERE برای فیلتر کردن رکوردهای قبل از گروه‌بندی استفاده می‌شود.

5. مثال‌های پیچیده‌تر با GROUP BY:

فرض کنید می‌خواهیم برای هر شهر، میانگین قیمت‌ها را برای روزهای مختلف محاسبه کنیم و فقط روزهایی را که میانگین قیمت آن‌ها بیشتر از 5000 است نمایش دهیم:

SELECT شهر, تاریخ, AVG(قیمت) AS میانگین_قیمت
FROM فاکتورها
GROUP BY شهر, تاریخ
HAVING AVG(قیمت) > 5000;

در اینجا:

  • داده‌ها بر اساس شهر و تاریخ گروه‌بندی می‌شوند.
  • سپس میانگین قیمت‌ها برای هر گروه محاسبه می‌شود.
  • فقط روزهایی که میانگین قیمت آن‌ها بیشتر از 5000 است در نتیجه نمایش داده می‌شوند.

نتیجه‌گیری:

دستور GROUP BY در SQL ابزار قدرتمندی برای گروه‌بندی داده‌ها و انجام محاسبات بر روی هر گروه است. با استفاده از این دستور می‌توانید نتایج آماری و تحلیلی به دست آورید و داده‌ها را بر اساس یک یا چند ستون گروه‌بندی کنید. این دستور به‌ویژه در گزارش‌گیری و تحلیل داده‌ها در پایگاه‌داده‌ها کاربرد فراوانی دارد.