درباره تابع رتبه بندی ویندوز بیشتر بدانید

من این مقاله را برای به اشتراک گذاشتن دانش خود در مورد توابع ویندوز و یا رتبه بندی ویندوز (این بخشی از توابع ویندوز) در اختیار شما قرار خواهم داد.

توابع ویندوز بسیاری در SQL Server معرفی شده اند مانند Rank، Row_Number، Dense_Rank، Lead، Lag، First، Last، Ntile و غیره. که می تواند برای کار بر روی یک مجموعه داده های ردیف استفاده شود. مجموعه داده های ردیف به معنی گروه بندی ردیف ها بر اساس شرایط خاص است. یا اگر ما در زمینه این مقاله صحبت کنیم، می توانیم به راحتی آن را یک پنجره بنامیم.

این توابع می توانند با کلمه کلیدی OVER ارتباط برقرار کنند تا یک رابطه درون یک مجموعه داده بر اساس شرایط مرتب سازی یا پارتیشن ارائه شده به کلمه کلیدی OVER همراه شود. دو عضو دیگر - Partition By Order By - برای ایجاد یک پنجره و دریافت نهایی مجموعه نتیجه همراه با توابع فوق استفاده می شود.

می توانید از توابع جمع مانند Sum و Avg و همچنین OVER استفاده کنید.

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

داده ها را با برخی از داده های تصادفی وارد کنید.

در حال حاضر، جدول ما به نظر می رسد مثل این است.

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

ما اول نتیجه را می بینیم و سپس درک خواهیم کرد که چگونه این عملکرد کار می کند. وقتی این T-SQL را اجرا میکنیم، خروجی زیر را دریافت میکنیم.

حالا، بیایید چگونگی عملکرد هر تابع در اینجا و استفاده از آن را بررسی کنیم.

  1. ROW_NUMBER ()

همانطور که از نام آن پیداست، ما شماره ردیف را می دهیم. این تابع می تواند برای پیدا کردن داده های تکراری هنگام استفاده پاراگراف مورد استفاده قرار گیرد. اگر می بینید، ستون اول شماره ردیف هر پنجره یا مجموعه داده های ردیف را می دهد که توسط استفاده از PARTITION BY در داخل تابع OVER تقسیم شده است. آنچه انجام می دهد این است که داده ها را درون یک جدول به مجموعه نتیجه های مختلف با همان نام ها تجزیه می کند. گروه دوم بنام B دارای 2 ورودی است .

بنابراین، Row_Number () شماره ردیف داخل آن پارتیشن را می دهد، و به ما این گزینه را برای فیلتر کردن تکراری که Row_Number بزرگتر از 1 برای یک داده خاص است را می دهد. در زیر پرس و جو برای پیدا کردن تکراری، در صورتی که شما به آن نیاز دارید قرار دارد.

  1. RANK ()

تابع Rank نتیجه را بر اساس شرایط به ما می دهد. اگر مقادیر یکسانی وجود داشته باشد، آن را به همان رتبه می دهد و سپس رتبه بعدی شماره ردیف بعدی خواهد بود. همانطور که در مثال دیده می شود، در T-SQL به Select Rank() توجه کنید ( به ترتیب نام)، A مقدار 1 را می دهد ، B مقدار 2 را می دهد، Cمقدار 4 را می دهد (به جای 3، 4 را می دهد).

اگر شما Select Rank() ( پارتیشن به ترتیب نام ) را ملاحظه کنید، متوجه خواهید شد که برای هر رکورد 1 را می دهد، دلیل آن این است که در داخل یک پارتیشن مقادیر یکسانی را پیدا می کند و شروع به رتبه بندی از 1 خواهد کرد.

  1. DENSE_RANK ()

این کاری همانند Rank() انجام می دهد، فقط با این تفاوت که بین اعداد را پر نمی کند، یک رتبه به مقادیر یکسان می دهد و رتبه بعدی ارزش بعدی در سری است. در اینجا C با رتبه 3 با استفاده از تابع DENSE_RANK () داده می شود برخلاف 4 که از تابع RANK() گرفته شده است.

  1. NTILE ()

Ntile یک مجموعه نتیجه بر اساس مقدار داده شده به عنوان یک پارامتر را خروجی می دهد. در اینجا اگر شما می بینید 10 پرونده وجود دارد، در حال حاضر ما Ntile را به عنوان (NTILE 2) تعریف کردیم، به این معنی که ما می خواهیم پرونده ها را به 2 گروه تقسیم کنیم و اگر نتیجه را مشاهده کنید، نتیجه یکسان را به شما نشان خواهد داد. مجموعه نتیجه بر اساس تقسیم گروه بر اساس رتبه داده می شود.

امیدوارم این مقاله به شما در درک بهتر درباره توابع رتبه بندی ویندوز کمک کند. در اینجا، PARTITION BY NAME یک مجموعه ردیف ایجاد می کند یا می توانید یک پنجره را بنویسید که توسط توابع مانند Rank، Dense_Rank، Ntile، Row_Number اجرا شود.

منبع : https://mug.ac/

1 پسندیده

سلام, احتمالا درستش ویندو فانکشن (raking window functions) هست و ویندوز درست نباشه, البته فقط یک اشتباه کوچیکه که برای من جالب بود :smile:

ولی این ترجمه میتونه بهتر هم باشه چون راستش خواندنش برای من یکمی سخت بود, امیدوارم پوزش منو بپذیرید :blush:

1 پسندیده

سلام خواهش می کنم ایرادی نداره بنده پاسخگو هستم. البته چیزی که شما فرمودید RANKING WINDOW FUNCTIONS بود که ترجمه کردید ویندو فانکشن ، ولی چیزی که بنده راجع بهش نوشتم درباره Learn About Windows Ranking Function
یعنی یادگیری درباره عملکرد رتبه بندی ویندوز بود و این ها با هم تفاوت داره

1 پسندیده

عرض منم همین بود Ranking Window function درستش هست. مشکل من با کلمه Windows بود و اینکه اگر این مطلب ویرایش بشه خیلی هم جالب و آموزندست, اما الان یکمی ناخوانا شده

عرض بنده این بود که در منبع لاتین هم با لفظ WINDOWS خطاب شده . برای اطلاعات بیشتر ملاحظه بفرمایید https://www.c-sharpcorner.com/article/learn-about-windows-ranking-function/

Rohit هم اشتباه کرده خب

1 پسندیده

می تواند :laughing:

1 پسندیده

عکسها رو هم اضافه کنید خیلی بهتره