توابع تجمیعی (Aggregate Function) در یک لحظه بر روی تمامی مقادیر یک ستون در تمامی سطرها اعمال می شوند. به عبارت دیگر این توابع در هر لحظه بر روی گروهی از سطرها اعمال می شوند. در مطالب قبلی تابع ()COUNT را توضیح دادیم که نام یک ستون را می گیرد و عددی را به تعداد سطرها برمی گرداند. در این مطلب می خواهیم در مورد این دسته از توابع صحبت کنیم.

توابع تجیعی را می توانیم جلوی دستور SELECT و یا جلوی عبارت های ORDER BY یا HAVING استفاده کنیم. زمانی که توابع تجمیعی در دستور SELECT و همراه با عبارت GROUP BY استفاده می شوند، سطرهایی که نتیجه اجرای کوئری هستند، گروه بندی (grouping) خواهند شد. بنابراین در دستور از عبارت GROUP BY همراه با توابع تجمیعی استفاده می کنیم تا سطرهای خروجی را گروه بندی (دسته بندی) کنیم. به طور مثال می توانیم به مثال های زیر اشاره کنیم:

۱گروه بندی کارمندان را بر اساس میزان حقوق

۲گروه بندی کارمندان بر اساس عنوان شغلی

۳تعداد کامندان شاغل در هر شهر یا کشوربه عبارت دیگر تعداد کارمندان هر شهر یا کشور

عبارت های DISTINCT و UNIQUE

پیش از این در مورد عبارت DISTINCT صحبت کرده ایم و گفتیم اگر در ستون مقادیر تکراری وجود داشته باشد DISTINCT مقادیر تکراری را یک مر تبه در خروجی نمایش می دهد. فرض کنید در ستون مقادیر 1, 1, 1, 3 وجود داشته باشد، که عدد ۱ تکرار شده است پس اگر دستور زیر را اجرا کنیم عدد ۱ یک مرتبه نشان داده می شود.

در اوراکل (و البته دیگر پایگاه داده های رابطه ای مانند SQL SERVER، عبارت دیگری به نام UNIQUE وجود دارد که معادل با عبارت DISTINCT ات و عملکردی شبیه به آن دارد. بنابراین دستور زیر معادل دستور بالا است و مقادیر تکراری را یک بار نشان می دهد.

توجه کنید DISTINCT و UNIQUE تابع نیستند بنابراین جز تابع های تجمیعی نیز نیستند ولی مانند تابع تابع های تجمیعی روی کل مقادیر ستون اعمال می شوند.

تابع های تجمیعی – تابع ()COUNT

فرض کنید جدولی داریم که اطلاعات کاربران را ذخیره می کند که دارای ستونی به نام CityName است که  نام شهر کاربران را در خود نگه می دارد و حال می خواهید اطلاعاتی همانند زیر را از جدول پیدا کنید. توجه کنید که فعلا فرض می کنیم مقدار ستون CityName نمی تواند NULL باشد.

مثال – تعداد تمامی کاربران را پیدا کنید. برای این کار لازم است از فراخوانی تابع (*)COUNT در دستور SELECT استفاده کنیم.

مثالنام تمامی شهرهای کاربران را انتخاب کنید. در این حالت می خواهیم به صورت تکراری نشان دهیم که کاربران ما عضو کدام شهر ها هستند پس لازم است تا از عبارت DISTINCT استفاده کنیم. همچنین می توانیم از عبارت UNIQUE نیز استفاده کنیم.

مثالتعداد شهرهایی که کاربران ساکن آن شهر ها هستند را پیدا کنید. در این حالت اولا تعداد شهرها را می خواهیم، پس باید از تابع ()COUNT استفاده کنیم و دوما می خواهیم نام شهرها را به صورت غیر تکراری پیدا کنیم. پس برای رسیدن به پاسخ باید دستور زیر را اجرا کنیم.

مثالتعداد تمامی کارمندها را پیدا کنید.

مثالتعداد تمامی کامندانی را پیدا کنید که کمسیون دریافت کرده اند.

همچنین می توانید از دستور زیر نیز برای پیدا کردن تعداد کارمندانی که کمسیون دریافت کرده اند نیز استفاده کنید با این تفاوت که در تابع ()COUNT ستون commission_pct آورده شده است.

زمانی که در تابع ()COUNT  از علامت * استفاده می کنیم، تعداد تمامی سطرها برگشت داده می شود ولی اگر همانند دستور بالا، نام یک ستون (commission_pct) را تعیین کنیم، از ستون هایی که مقدار NULL دارند صرف نظر می کند. پس در دستور بالا تنها آن سطرهایی شمرده می شوند که ستون commission_pct آنها غیر NULL باشد. بنابراین می توانیم مثال بالا را با دستور زیر نیز پیاده سازی کنیم.

تابع های تجمیعی – تابع ()AVG

تابع دیگیری به نام ()AVG وجود دارد که برای محاسبه میناگین اعداد یک ستون در تمامی سطرها استفاده می شود. فرض کنید در جدول ستونی دارید که که چهار عدد ۱،۱،۱ و ۳ را دارد. میناگین این اعداد برابر ۱.۵ است. بنابراین برای بدست آوردن میانگین اعداد باید از دستور زیر استفاده شود.

اما اگر بخواهیم میانگین را بدون توجه به تکرار اعداد حساب کنیم، میانگین برابر با عدد ۲ می شود چون یک عدد ۳ و یک عدد ۱ وجود خواهند داشت. برای این منظور باید از دستورهای زیر استفاده کنیم.

در مقابل عبارت های DISTINCT و UNIQUE عبارتی به نام ALL وجود دارد که تمامی مقادیر ستون را شامل می شود. به عبارت دیگر توسط ALL هم مقادیر تکراری و هم غیر تکراری همگی در نظر گرفته می شوند ولی در عبارت های DISTINCT و UNIQUE هر مقدار تکراری تنها یکبار در نظر گرفته می شوند. بنابراین می توانیم نتیجه بگیریم دو دستور زیر یک معنا و خروجی را خواهند داشت.

تابع های تجمیعی – تابع های ()MIN و ()MAX

دو تابع ()MIN و ()MAX وجود دارد که به ترتیب کوچکترین مقدار و بیشترین مقدار درون یک ستون را پیدا می کند. بنابراین اگر بخواهیم کمترین و بیشترین مقدار حقوق را پیدا کنیم باید از دستور زیر استفاده شود.

مثالکمترین و بیشترین میزان حقوق را برای تمامی کارمندانی پیدا کنید که شناسه کارمندی آنها میان ۱۰۰ تا ۱۵۰ باشد.

مثالکمترین و بیشترین میزان حقوق را برای تمامی کارمندانی پیدا کنید که شغل آنها یکی از مشاغل SA_MAN یا IT_PROG یا SK_MAN باشد و نام خانوادگی آنها با n خاتمه یابد.

تابع های تجمیعی – تابع ()SUM

تابع دیگری به نام SUM وجود دارد که مجموع مقادیر یک ستون را به ازای تمامی سطرها محاسبه می کند. به طور مثال می خواهیم مجموع تمامی کمسیون های تمامی کاربران را محاسبه کنیم پس باید از دستور زیر استفاده شود.

مثالمجموع، کمترین و بیشترین میزان کمیسون و تعداد تمامی کارمندانی را نشان دهید که شناسه دپارتمان آنها عدد ۹۰ یا ۸۰ باشد.