توابع پنجره ای SQL FIRST_VALUE()
: توضیح جامع با مثال
مقدمه:
توابع پنجره ای در SQL به شما این امکان را می دهند که محاسبات را بر روی گروه های متوالی از داده ها در یک ردیف واحد انجام دهید. این توابع برای انجام کارهایی مانند یافتن اولین، آخرین، یا بزرگترین مقدار در یک پارتیشن از داده ها بسیار مفید هستند.
یکی از توابع پنجره ای پرکاربرد FIRST_VALUE()
است که اولین مقدار را در یک پارتیشن از داده ها بر اساس یک ستون مرتب شده برمی گرداند. این تابع برای یافتن مقادیر اولیه در گروه های مختلف داده ها بسیار کاربردی است.
نحو:
FIRST_VALUE(expression)
OVER (PARTITION BY partition_expression
ORDER BY order_expression
[ROWS frame_clause])
اجزاء:
expression
: عبارتی که می خواهید اولین مقدار آن را بدست آورید.partition_expression
: عبارتی که داده ها را به پارتیشن های مجزا تقسیم می کند.order_expression
: عبارتی که ترتیب مرتب سازی داده ها در هر پارتیشن را مشخص می کند.frame_clause
: (اختیاری) مشخص کننده محدوده ای از ردیف ها که تابع در آن اعمال می شود.
مثال:
فرض کنید جدولی به نام customers
با ستون های customer_id
, name
, city
و order_date
داریم. می خواهیم برای هر شهر، اولین تاریخ سفارش را بدست آوریم.
SELECT customer_id,
name,
city,
FIRST_VALUE(order_date) OVER (PARTITION BY city ORDER BY order_date) AS first_order_date
FROM customers;
در این مثال، داده ها بر اساس ستون city
پارتیشن بندی شده و سپس بر اساس ستون order_date
مرتب می شوند. تابع FIRST_VALUE()
اولین تاریخ سفارش را برای هر شهر برمی گرداند.
نکات:
- اگر از
PARTITION BY
استفاده نکنید، تابعFIRST_VALUE()
اولین مقدار را از کل مجموعه نتایج برمی گرداند. - اگر از
ORDER BY
استفاده نکنید، ترتیب پیش فرض بر اساس شناسه ردیف خواهد بود. - می توانید از claus های مختلف
frame
برای تعریف محدوده ای از ردیف ها که تابع در آن اعمال می شود استفاده کنید. به عنوان مثال،ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
اولین مقدار در ردیف جاری را برمی گرداند.
مزایای استفاده از FIRST_VALUE()
:
- خوانایی و وضوح کد را افزایش می دهد.
- نیاز به پرس و جوهای فرعی را کاهش می دهد.
- عملکرد را در برخی موارد بهبود می بخشد.
معایب استفاده از FIRST_VALUE()
:
- می تواند برای مبتدیان SQL پیچیده باشد.
- در همه پایگاه های داده های SQL پشتیبانی نمی شود.
منابع:
- https://en.wikipedia.org/wiki/SQL
- https://www.geeksforgeeks.org/videos/window-functions-in-sql/
- https://www.w3schools.com/sql/sql_ref_sqlserver.asp
مثال های اضافی:
- یافتن کمترین قیمت برای هر محصول:
SELECT product_id,
product_name,
MIN(price) OVER (PARTITION BY product_id) AS min_price
FROM products;
- یافتن بالاترین حقوق در هر بخش:
SELECT employee_id,
name,
department,
FIRST_VALUE(salary) OVER (PARTITION BY department ORDER BY salary DESC) AS max_salary
FROM employees;
- محاسبه میانگین متحرک ۳ روزه قیمت سهام:
SELECT date,
price,
AVG(price) OVER (PARTITION BY stock_id ORDER BY date ROWS BETWEEN ۲ PRECEDING AND CURRENT ROW) AS moving_average
FROM stock_prices;
همانطور که مشاهده می کنید، تابع FIRST_VALUE()
یک ابزار قدرتمند برای تجزیه و تحلیل داده ها در SQL است. با کمی تمرین، می توانید از این تابع برای حل طیف گسترده ای از مشکلات به طور کارآمد و موثر استفاده کنید.