در این مطلب می خواهیم توابعی از SqlAlchemy را نشان دهیم که وظیفه آنها پیاده سازی عملکرد کاربردهای توابع تجمیعی در زبان SQL است. در مطلب زیر از دوره برنامه نویسی SQL به طور کامل در مورد توابع تجمیعی و کاربرد عبارت های GROUP BY و HAVING در زبان SQL صحبت شده است، بنابراین دیگر از یادآوری آنها خودداری می کنیم.

توابع تجمیعی در SQL

جمع بندی مطلب توابع تجمیعی در SQL

گروه بندی داده ها با GROUP BY

عبارت HAVING برای اعمال شرط در GROUP BY

در کد شکل زیر ابتدا نیازمندهای لازم برای اتصال و بدست آوردن ساختار (MetaData) جدول ها به صورت کلاس های Table و Column را به همراه دیگر نیازمندی ها مانند متدهای select و label به برنامه اضافه کرده ایم. اگر دقت کنید یک زیر ماژول از sqlalchemy.sql به نام func نیز ضمیمه شده است. از طریق این زیر ماژول می توانیم به متدهایی که توابع تجمیعی SQL را شبیه سازی می کنند دسترسی پیدا کنیم. توجه کنید که در شکل زیر، این بار می خواهیم از جدول salaries از پایگاه داده آماده employees در MySQL استفاده کنیم. به یاد دارید که پیش از هر چیز باید به پایگاه داده هدف و دارای جدول های از پیش موجود متصل شده و سپس ساختار آنرا توسط کلاس MetaData بدست آوریم.

در کد های زیر می خواهیم توسط ()func.min و ()func.max کمینه و بیشینه دستمزد دریافتی میان تمامی کارمندان را بدست آوریم. توجه کنید که توسط متد ()label نام مستعار به ستون خروجی انتساب داده ایم. پس از ایجاد و اجرای کوئری توسط متد ()execute، توسط متد ()first تنها تک سطر برگشتی که شامل دو ستون (نام مستعار) MinSalary و MaxSalary را درون متغیرهای min_ و max_ ذخیره کرده ایم. در واقع کوئری ما دارای تک رکورد برگشتی با دو ستون بود که مقدار هر ستون در متغیرهای مورد نظر ذخیره شده اند.

در کدهای زیر متدهای ()func.sum و ()func.avg برای شبیه سازی توابع SUM و AVG برای محاسبه مجموع و میانگین در زبان SQL شبیه سازی شده اند. توجه کنید در کدهای زیر خروجی متغیرهای sum_ و avg_ به صورت یک تاپل تک عنصری است که برای نمایش بهتر از اندیس گذاری (و اندیس عددی صفر برای اشاره به عنصر اول) استفاده کرده ایم. توجه کنید تمامی متدهای درون func نیز درون لیست فرستاده شده به متد ()select فرستاده شده اند.

عبارت GROUP BY در کنار تابع های تجمیعی

در کدهای زیر متد ()func.count  برای شبیه سازی تابع COUNT برای محاسبه تعداد سطرهای برگشتی در زبان SQL شبیه سازی شده است. هچنین از متد ()func.group_by برای شبیه سازی عبارت GROUP BY در زبان SQL استفاده شده است. در مثال زیر می خواهیم سطرهای خروجی را بر اساس جنسیت کارمندان گروه بندی کنیم. به عبارت دیگر می خواهیم بدانیم چه تعداد کارمند و چه تعداد کارمند خانم داریم. استفاده از متد ()group_by تنها محدود به متد ()count نیست و می توانیم با متدهای بالا نیز استفاده کنیم.

در نهایت در کدهای زیر می خواهیم نشان دهیم که لزومی ندارد حتما متد ()func.count یا دیگر متدهای تجمیعی بالا را همراه با متد ()func.group_by استفاده کنید. کد زیر تعداد تمامی کارمندان را صرف نظر از خانم یا اقا بودن نشان می دهد.