توابع مهم SQL از قبیل MIN, MAX, COUNT, AVG, SUM (+تمرینات)

06 اسفند 1397
درسنامه درس 10 از سری آموزش زبان SQL
sql-language-important-functions

سلام دوستان گرامی، در این قسمت از سری آموزش جامع زبان SQL قصد بررسی چند تابع مختلف را داریم. این توابع از توابعی هستند که حتما در طول توسعه ی یک پروژه به کارتان می آیند. بیایید بدون مقدمه شروع کنیم!

توابع ()MIN و ()MAX

اگر معنی نام های این توابع را در انگلیسی بدانید دیگر حتی نیازی به توضیحات من نخواهید داشت! کلمه ی Min در انگلیسی مخفف Minimum (به معنی «کمترین») و کلمه ی Max مخفف Maximum (به معنی «بیشترین») است. حالا که معنی نام این دو واضح شد، کاراییشان نیز واضح است؛ تابع ()MIN کمترین مقدار از یک ستون انتخاب شده را بر می گرداند و ()MAX نیز بیشترین مقدار را.

ساختار کلی تابع ()MIN

SELECT MIN(column_name)
FROM table_name
WHERE condition;

ساختار کلی تابع ()MAX

SELECT MAX(column_name)
FROM table_name
WHERE condition;

این بار به سراغ جدول جدیدی از پایگاه داده ی Northwind میرویم. تصویر زیر، قسمتی از جدول Products (به معنی «محصولات») در این پایگاه داده است:

قسمتی از جدول Products در پایگاه داده ی Northwind
قسمتی از جدول Products در پایگاه داده ی Northwind

مثال استفاده از تابع ()MIN و ()MAX

کد زیر، ارزان ترین محصول ما را پیدا می کند:

SELECT MIN(Price) AS SmallestPrice
FROM Products;

برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.

از طرف دیگر، کد زیر گران ترین محصول ما را برمیگرداند:

SELECT MAX(Price) AS LargestPrice
FROM Products;

برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.

توابع ()COUNT و ()AVG و ()SUM

به طور خلاصه می توان گفت:

  • تابع COUNT (به معنی «شمردن») تعداد ردیف هایی را بر می گرداند که با حالت یا شرط خاصی انطباق دارند.
  • تابع AVG (مخفف Average - به معنی «میانگین») میانگین مقادیر عددی یک ستون را برمیگرداند.
  • تابع SUM (به معنی «جمع کل») جمع کل یک ستون عددی را بر میگرداند.

ساختار کلی تابع ()COUNT

SELECT COUNT(column_name)
FROM table_name
WHERE condition;

ساختار کلی تابع ()AVG

SELECT AVG(column_name)
FROM table_name
WHERE condition;

ساختار کلی تابع ()SUM

SELECT SUM(column_name)
FROM table_name
WHERE condition;

وقت آن شده است که مثال ها را بررسی کنیم.

مثال های کار با توابع ()COUNT و ()AVG و ()SUM

مثال اول، دستور زیر تعداد محصولات ما را به ما می دهد:

SELECT COUNT(ProductID)
FROM Products;

برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.

نکته: مقادیر NULL شامل این شمارش نمی شوند.

مثال دوم، دستور زیر میانگین قیمت تمام محصولات ما را محاسبه می کند:

SELECT AVG(Price)
FROM Products;

برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید، می بینید که میانگین قیمت محصولات ما 28.866363636363637 است.

در این حالت نیز مقادیر NULL محاسبه نمی شوند.

حالا بیایید به جدول دیگری برویم. جدول زیر، قسمتی از جدول OrderDetails (به معنی «جزئیات سفارش») می باشد:

قسمتی از جدول OrderDetails در پایگاه داده ی Northwind
قسمتی از جدول OrderDetails در پایگاه داده ی Northwind

حالا می توانیم به راحتی از تابع ()SUM استفاده کنیم و جمع کل مقادیرِ ستون Quantity (به معنی «تعداد») را پیدا کنیم:

SELECT SUM(Quantity)
FROM OrderDetails;

مقداری که به ما بر میگردد 12743 است که در واقع جمع تمام مقادیر موجود در ستون Quantity است. برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید. مثل همیشه نیز باید بدانید که مقادیر NULL حساب نمی شوند چرا که مقداری ندارند.

تمرینات

حتما می دانید که راز برنامه نویسی در کدنویسی است! این جمله یعنی شما تا با دستان خود و با فکر خود کد ننویسید برنامه نویس نخواهید شد حتی اگر کدها را بفهمید. دیدن و فهمیدن کدها یک چیز است و نوشتن آن ها چیزی دیگر! بنابراین در هر چند جلسه ممکن است تمریناتی به شما بدهیم و از شما بخواهیم جواب را پیدا کنید. توصیه ی بنده این است که مستقیما به سمت جواب نروید بلکه سعی کنید خودتان آن را به دست بیاورید. برویم سراغ تمرین ها...

سوال اول: مقادیر City  و Country را به بروزرسانی (UPDATE) کنید:

مقادیر City  و Country را به بروزرسانی (UPDATE) کنید

پاسخ سوال:

UPDATE Customers
SET City = 'Oslo',
Country = 'Norway'
WHERE CustomerID = 32;

در جلسات قبل توضیح دادیم که برای تعیین مقدار از دستور SET استفاده می کنیم. همچنین کلیدواژه ی UPDATE که در صورت سوال به شما دادیم به معنای بروزرسانی است (یعنی تغییر دادن یک مقدار قدیمی). نکته ی خاصی در مورد Country وجود ندارد اما نکته ی ریزی که اکثر برنامه نویسان فراموش می کنند قرار دادن ویرگول بین مقادیر مختلفی است که تعیین می شوند. به خط ,'SET City = 'Oslo در کد دقت کنید؛ اگر ویرگول (که قرمز شده است) برداشته شود تمام کد ما خراب می شود.


سوال دوم: تمام ردیف هایی که در جدول Customers قرار دارند و مقدار Country  در آن ها برابر با Norway است را حذف کنید:

تمام ردیف هایی که در جدول Customers قرار دارند و مقدار Country  در آن ها برابر با Norway است را حذف کنید

پاسخ سوال:

DELETE FROM Customers
WHERE Country = 'Norway';

دستور DELETE و همچنین دستور WHERE در مقالات زیر مورد بحث قرار گرفت:

دستورات UPDATE و DELETE در SQL

دستور WHERE در SQL (+تمرینات)

اگر با دستور DELETE و مخصوصا نکات ریز WHERE آشنا بوده باشید، این سوال برایتان هیچ نکته ی خاصی نداشته است.


سوال سوم: از بین توابعی که در این جلسه یاد گرفته ایم، تابعی را انتخاب کنید که ردیف هایی را به ما برگرداند که در آن ها Price دارای مقدار 18 است:

از بین توابعی که در این جلسه یاد گرفته ایم، تابعی را انتخاب کنید که ردیف هایی را به ما برگرداند که در آن ها Price دارای مقدار 18 است

پاسخ سوال:

SELECT COUNT(*)
FROM Products
WHERE Price = 18;

نکات کد بالا:

با تابع COUNT آشنا شده ایم و میدانیم که تعداد ردیف هایی را بر می گرداند که با حالت یا شرط خاصی انطباق دارند. این حالت یا شرط خاص را می توان درون پرانتز های آن (به عنوان پارامتر) نوشت. ما در این مثال از علامت ستاره * استفاده کرده ایم؛ باید بدانید علامت ستاره یعنی همه! به عبارت دیگر کد (*)SELECT COUNT می گوید همه را بشمار، سپس خط FROM Products جدول ما را مشخص می کند و ;WHERE Price = 18 می گوید در مواقعی که مقدار price برابر 18 باشد.

خلاصه ی مقاله

در قسمت اول این مقاله با توابع مهم زبان SQL آشنا شدیم؛ یعنی توابع MIN, MAX, COUNT, AVG, SUM و برای هر کدام مثال هایی ذکر کردیم. سپس در قسمت دوم مقاله طبق عادت همیشگی چند تمرین به شما ارائه کرده و آن ها را با پاسخ صحیح تحلیل کردیم. واضح است که این توابع تمام توابع موجود در SQL نیستند اما میتوان گفت از پرکاربرد ترین آن ها به شمار می آیند. امیدوارم از این قسمت لذت برده باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (4 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

زهرا
28 آذر 1400
سلام و وقت بخیر من یه سری سمپل دیتا دارم و طبق اونا میخام ، تعداد مشتریهای هر برند رو تقسیم بر تعداد محصولات هر برند کنم تا بالاترین نرخ فروش رو به دست بیارم دوتا کوئری رو نوشتم که تعداد مشترتی های هر برند و تعداد محصولات هر برند رو به دست آوردم حالا سوالم اینه که چه جوری میتونم کوئری ها رو به هم ربط بدم و این تقسیم رو انجام بدم ؟ و برای تقسیم از چه تابعی و ار چه دستوری باید استفاده کنم ممنون میشم جوابم رو بدین زمان زیادی ندارم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

لیلا
15 مرداد 1398
سلام امیر جان. خیلی خیلی ممنونم بابت مطالب خارق العاده تون. آموزش هاتون خیلی ساده و مفیدن و اگه یه کلاس نزارین و معلم نشین استعدادتون بهدر رفته .فقط خواستم گفته باشم :) بازم ممنون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
16 مرداد 1398
سلام دوست عزیز خوشحالم که از آموزش ها راضی هستین. نظر لطف شماست ازتون ممنونم.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

سهیل
26 تیر 1398
با سلام و تشکر راجع به ارتباط بین PHP و MSQL مقاله دارین؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
27 تیر 1398
سلام دوست عزیز مقاله ی آموزشی PDO ما در مورد ارتباط با پایگاه MySQL هست: https://www.roxo.ir/series/pdo-tutorials/ همچنین در آینده ی نزدیک دوره ی طراحی شبکه ی اجتماعی رو منتشر می کنیم که اونجا عملی با پایگاه داده کار می کنیم (البته به صورت ساده و خلاصه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمد رضا
09 اسفند 1397
بسیار عالی. خواستم به خاطر تمریناتی که میزاری تشکر کنم خیلی به من کمک میکنه

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
09 اسفند 1397
سلام دوست عزیز، خوشحالم که تونستم بهتون کمک کنم!

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.