در حال بارگذاری ... .

در این مقاله می خواهیم در رابطه با window function ها  و کاربردهای مفید آنها در هنگام استخراج اطلاعات از دیتا بیس صحبت کنیم.

اگر اشتباه نکنم window function ها از نسخه ۸ به mysql و از نسخه ۱۰.۲ به mariadb اضافه شدند.

window function ها به ما اجازه می دن که با روش های جدید و آسانتر و بهتر بتونیم مشکلات مربوط به استخراج اطلاعات از دیتا بیس رو انجام بدیم.

فرض کنید ما یه جدول فروش داریم که فروش توسط کارمندان و سال های مالی مانند جدول زیر درون اون ذخیره می شود.

بعد از این که کد بالا رو اجرا کنیم یه جدول مشابه جدول رو برو داریم.

همانطور که می دونیم توابعی مثل sum() وجود دارند که تمام مقادیر یک ستون رو جمع می بندند و حاصل جمع رو در اختیار ما قرار می دهند.

ما میتونیم با استفاده از این تابع مجموع فروش رو در تمام سال های مالی و توسط همه افراد فروشنده رو بدست بیاریم.

یا می تونیم با استفاده از group by مجموع فروش فروشنده ها رو در سال های مالی مختلف بدست بیاریم

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

window function شبیه به group by عمل می کنه با این تفاوت که تعداد سطر ها رو کم نمی کنه و فقط خروجی مورد نظر اش رو به صورت یک ستون به خروجی اضافه می کنه .

کوئری بالا رو ببینید.

در اینجا ما مجموع فروش رو بر اساس سال مالی(fiscal_year) بدست می یاریم  و در ستونی به نام total_sales نمایش می دیم .http://pooyadev.ir/wp-content/uploads/2019/10/WF3.png

تفاوت این روش با روش group by در این است که در این روش هیچ سطری حذف نمی شه و فقط مقدار بدست آمده در اون گروه در ستون مربوطه قرار می گیره.

در اینجا تابع sum بر روی محتوایی که در OVER قرار داره اعمال می شه و نتیجه در هر سه سطر مربوط به سال ۲۰۱۶ قرار می گیره.

ساختار کلی ویندو فانکشن ها به صورت زیر هست اش :

توجه داشته باشید که window function ها بعد از join،where،group by و having و قبل از order by ،limit و select distance استفاده می شوند.

  • در کوئری بالا بخش partition_clause ردیف ها را به تکه یا پارتیشن تقسیم می کند. 

تابع بر روی هر پارتیشن انجام می شه و وقتی به پارتیشن بعدی می ره دوباره تنظیم و اجرا می شود.

  • order by  نحوه ترتیب قرار گیری هر ردیف رو داخل همون پارتیشن که وجود داره مشخص می کنه  .
  • frame  برای تعریف یک زیر پارتیشن استفاده می شود.
, , ,
اشتراک گذاری:

مایل به ثبت دیدگاه هستید؟

آخرین دیدگاه‌ها

آخرین دیدگاه‌ها