اوراکل 26ai – چگونه با عبارت QUALIFY نتایج توابع تحلیلی را بدون subquery فیلتر کنیم؟

فرض کنید میخواهیم از جدول employees، از هر دپارتمان، فقط اطلاعات کارمندی را نمایش دهیم که بالاترین حقوق را دارد. برای گرفتن این خروجی، تا قبل از نسخه 26ai معمولا از subquery استفاده می کردیم:

SELECT *
FROM (
  SELECT employee_id,
         first_name,
         department_id,
         salary,
         RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS Rank_Per_DEP
  FROM employees
)
WHERE Rank_Per_DEP = 1;

در نسخه 26ai می توان بدون استفاده از subquery فوق به این خروجی رسید این کار از طریق عبارت QUALIFY قابل انجام است:

SELECT employee_id,
       first_name,
       department_id,
       salary,
       RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS Rank_Per_DEP
FROM employees
QUALIFY Rank_Per_DEP = 1;

بنابرین عبارت QUALIFY برای فیلتر کردن نتایج توابع تحلیلی به‌کار می‌رود. این عبارت نیاز به استفاده از زیرکوئری را حذف کرده و خوانایی و کارایی کوئری را افزایش می‌دهد.

در صورت استفاده از این عبارت در نسخه های قبلی، با خطای زیر روبرو خواهیم شد:

ERROR at line 7:
ORA-03049: SQL keyword 'RANK_PER_DEP' is not syntactically valid following
'...FROM employees
QUALIFY '
Help: https://docs.oracle.com/error-help/db/ora-03049/

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

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

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