SQL

تابع پنجره ای RANK

تابع پنجره ای RANK در SQL: توضیح جامع با مثال

مقدمه

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

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

سینتکس

سینتکس کلی تابع RANK() به شرح زیر است:

SQL
RANK() OVER (PARTITION BY partition_expression ORDER BY order_expression)

در کجا:

  • partition_expression عبارتی است که ردیف ها را به پارتیشن ها تقسیم می کند.
  • order_expression عبارتی است که ردیف ها را در هر پارتیشن مرتب سازی می کند.

اگر partition_expression مشخص نشده باشد، تمام ردیف ها در یک پارتیشن واحد قرار می گیرند. اگر order_expression مشخص نشده باشد، ردیف ها به ترتیب صعودی بر اساس اولین ستون در عبارت SELECT مرتب می شوند.

مثال

فرض کنید جدولی به نام customers داریم که حاوی ستون های customer_id، last_name و order_amount است. می خواهیم رتبه هر مشتری را بر اساس order_amount به ترتیب نزولی بدست آوریم. می توانیم از کوئری زیر برای انجام این کار استفاده کنیم:

SQL
SELECT customer_id, last_name, order_amount,
  RANK() OVER (ORDER BY order_amount DESC) AS customer_rank
FROM customers;

این کوئری نتیجه زیر را برمی گرداند:

customer_id | last_name | order_amount | customer_rank
-----------+-----------+-------------+-------------
۱           | Johnson  | 1500.00     | 1
۲           | Williams | 1200.00     | 2
۳           | Brown     | 1100.00     | 3
۴           | Miller    | 1000.00     | 4
۵           | Davis     | 900.00      | 5

همانطور که مشاهده می کنید، به هر مشتری با بالاترین سفارش، رتبه ۱ اختصاص داده می شود و به مشتری با کمترین سفارش، رتبه ۵ اختصاص داده می شود.

نکات

  • تابع RANK() می تواند ناتعیین کننده باشد، به این معنی که نتایج آن می تواند بسته به ترتیب اجرای کوئری متفاوت باشد. اگر به نتایج قابل تکرار نیاز دارید، باید از تابع پنجره ای دیگری مانند DENSE_RANK() استفاده کنید.
  • تابع RANK() می تواند برای اختصاص رتبه های غیرتکراری به ردیف ها با مقادیر یکسان استفاده شود. برای انجام این کار، می توانید از عبارت DENSE_RANK() به جای RANK() استفاده کنید.
  • تابع RANK() می تواند برای اختصاص رتبه ها به ردیف ها در یک زیرمجموعه انتخابی از ردیف ها استفاده شود. برای انجام این کار، می توانید از عبارت WHERE در داخل عبارت OVER استفاده کنید.

منابع

نتیجه

تابع RANK() یک تابع پنجره ای قدرتمند در SQL است که می تواند برای رتبه بندی ردیف ها بر اساس مقادیر در یک یا چند ستون استفاده شود. این تابع برای انواع مختلف وظایف تحلیلی، مانند ردیابی عملکرد، شناسایی مشتریان برتر و تجزیه و تحلیل روندها مفید است.

۵/۵ ( ۱ امتیاز )
نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا