sam_t95

analytical function

4 ردود في هذا الموضوع

السلام عليكم

ربما لم يتعامل الكثيرين منا بـ

analytical functions

التي قدمتها شركة اوراكل لأول مرة مع قاعدة البيانات 8.1.6

ولا يعلم عن الفوائد التي تقدمها.

تستخدم الـ اناليتيكل فانشكن كحل سهل للأستعلامات المعقدة

وتأخذ شكل يشبه التالي:

SELECT RANK() OVER(ORDER BY product)

هناك عدد من الوظائف التخليلية (اناليتكال فانكشن) وتصنف وفق عدد من التصنيفات

بشكل سريع سنقوم بعرض نوع منها وتبيان فائدتها هنا.

الكود التالي في غاية البساطة وهو أول ما نتعلمه في لغة الإستعلامات:

SELECT EMPLOYEE_ID, FIRST_NAME, SALARY 
FROM employees

وإذا أضفنا

rownum

لعرض عدد الأسطر المعادة لنا سنجد أن النتيجة ستظهر لنا بالأمر التالي:

SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
, rownum
FROM employees

وماذا لو أردنا ترتيب النتائج بحسب الراتب ؟؟؟ الأمر مازال سهلا أليس كذلك ؟؟؟

SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, rownum 
from employees
order by salary

ولكن لنتوقف لحظة هنا ... هناك مشكلة في البيانات المعروضة

لقد اختلف ترقيم الأسطر الذي قمنا بعرضه ، ولا يتم عرض رقم السطر بالشكل الصحيح باستخدام

rownum

لماذا ؟؟؟

السبب أن تعليمة الترتيب تنفذ بعد أن يقوم العمود

rownum

برد قيمة السطر

ما الحل ؟؟؟

سنستخدم

subquery

ثم نقوم بترتيب النتائج بعدها ويمكن ذلك بالتعليمة التالية:

select EMPLOYEE_ID, FIRST_NAME, SALARY, ROWNUM 
from (SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
from employees
order by salary)
/

إلى الآن الأمر ليس معقدا ولكنه بدأ بأن يصبح طويلا بعض الشيء

وقد يتطور الأمر من البساطة إلى التعقيد ويمكننا أن ندرك ذلك إذا طلبنا تصنيف البيانات السابقة إلى شرائح حسب الراتب اقصد

RANKING

لحل هذه المشكلة يمكننا استبدال التعليمة السابقة والتي وصلنا إليها، بتعليمة أخرى اسهل والتي تسهل علينا التنفيذ وتعطي اداء أفضل من حيث زمن التنفيذ:

select EMPLOYEE_ID, FIRST_NAME, SALARY, -- ROWNUM,
ROW_NUMBER() OVER (ORDER BY SALARY) ---- from (SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
from employees
order by salary
--)
/

لاحظوا اننا استغنينا عن تعليمة الاستعلام الفرعية، وحلت محلها التعليمة الجديدة، وحصلنا على نفس النتيجة.

والآن يمكننا بنفس الطريقة عرض البيانات حسب الراتب وترتيبها إلى شرائح باستخدام فانكشن أخر:

DENSE_RANK()

select EMPLOYEE_ID, FIRST_NAME, SALARY, -- ROWNUM,
DENSE_RANK() OVER (ORDER BY SALARY) ---- from (SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
from employees
order by salary
--)
/

ما رأيكم ؟؟؟

أليس تنفيذ تعليمات للوصول إلى نفس النتائج وبسرعة أكبر أفضل من إعادة الإختراع

ملاحظة:

الجدول المستخدم تابع للمستخدم

HR

أرجو من له اطلاع أن يتابع في هذا الموضوع المهم

والسلام

تم تعديل بواسطه sam_t95
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

و أخيراً : تمت إضافة مشاركة قيمة للمنتدى ... جزالك الله خيراً ....

سأكمل في نفس الموضوع و لكن في الأيام القادمة و السبب كثرة المشاغل ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تفائلوا بالخير تجدوه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

درس جميل ....

لكن سؤال ..؟؟

ما هو تصنيف البيانات إلى شرائح RANKING

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .