تمنح الدالة DENSE_RANK() رتبة مشتركة للصفوف التي تتساوى في قيم ترتيب النافذة. وعندما تنتقل إلى قيمة مختلفة، تزيد الرتبة بمقدار واحد فقط، مهما كان عدد الصفوف التي تشاركت الرتبة السابقة. لذلك تكون الرتب متتابعة من دون أرقام مفقودة بينها.
يفيد هذا السلوك في الأسئلة التي تتحدث عن مستويات مختلفة، مثل ثاني أعلى راتب مميز أو أعلى ثلاثة تقييمات مختلفة للأفلام. نحن هنا نهتم بعدد القيم المختلفة التي تسبق القيمة الحالية، وليس بعدد الصفوف الفعلي الذي يسبق الموظف أو الفيلم.
مثال
WITH movies AS (
SELECT 1 AS id, 9 AS rating
UNION ALL SELECT 2, 9
UNION ALL SELECT 3, 8
)
SELECT id, rating,
DENSE_RANK() OVER (ORDER BY rating DESC) AS rating_rank
FROM movies
ORDER BY id;
يشترك الفيلمان صاحبا التقييم تسعة في الرتبة الأولى، ويحصل التقييم ثمانية على الرتبة الثانية. لا تزيل الدالة أي فيلم من النتيجة. وإذا احتجنا إلى صف واحد لكل تقييم، فعلينا معالجة التكرار بصورة منفصلة عن حساب الرتبة.
باختصار: ترتب DENSE_RANK() القيم المختلفة بالتتابع، وتحافظ على رتبة مشتركة للصفوف المتعادلة دون ترك فجوات.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.