Oracle SQL: كيفية استرداد أعلى 5 قيم في عمود
في استعلامات قاعدة البيانات، غالبًا ما يكون من الضروري قصر النتائج على صفوف ذات خصائص محددة، مثل القيمة الأعلى أو الأدنى في عمود معين. في Oracle SQL، يمكنك استخدام الوظائف التحليلية مثل RANK() أو DENSE_RANK() أو ROW_NUMBER() لهذا الغرض.
RANK() وDENSE_RANK() لأعلى القيم
تقوم وظائف التحليل مثل RANK() وDENSE_RANK() بتعيين تصنيف لكل صف بناءً على تصنيف محدد. لاسترداد أعلى 5 قيم في عمود، يمكنك استخدام تنسيق الاستعلام التالي:
SELECT *
FROM (
SELECT , RANK() OVER (ORDER BY DESC) AS rnk
FROM
)
WHERE rnk
RANK() يعين ترتيبًا رقميًا لكل صف، بدءًا من 1، وهي أعلى قيمة. يقوم DENSE_RANK() بضغط الفجوات عند وجود قيم متطابقة أثناء تعيين الرتب.
ROW_NUMBER() لعدد محدد من الصفوف
تقوم الدالة التحليليةROW_NUMBER() بتعيين رقم تسلسلي لكل صف. يمكنك استخدام هذا لاسترداد عدد محدد من الصفوف بغض النظر عن قيمتها. على سبيل المثال:
SELECT *
FROM (
SELECT , ROW_NUMBER() OVER (ORDER BY DESC) AS rnk
FROM
)
WHERE rnk
الحل غير التحليلي: استخدم ROWNUM
على الرغم من أنه أقل شيوعًا، يمكنك أيضًا استخدام العمود الزائف ROWNUM لقصر النتائج على عدد محدد من الصفوف. ومع ذلك، يجب استخدامه بحذر لأنه يتم تقييم ROWNUM قبل جملة ORDER BY، مما قد يؤدي إلى نتائج غير متوقعة.
مثال: احصل على الموظف الأعلى أجرًا
لتوضيح استخدام RANK() وDENSE_RANK() عند استرداد أعلى 5 موظفين أجرًا:
SELECT *
FROM (
SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk
FROM emp
)
WHERE rnk
يقوم هذا الاستعلام بتعيين مرتبة رقمية لكل موظف بناءً على راتبه، حيث يمثل الرقم 1 الموظف الأعلى أجرًا. ثم يتم عرض أعلى 5 موظفين حسب الترتيب التنازلي للرواتب.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3