الانتقال إلى المحتوى الرئيسي
الوحدة 13 · الدرس 3 من 451/57 في الدورة~15 min
دروس الوحدة (3/4)

التصنيفات: ROW_NUMBER وRANK وDENSE_RANK

التصنيفات: ROW_NUMBER وRANK وDENSE_RANK

وبعيدًا عن التجميع، تتألق وظائف النافذة في الترتيب والتصنيف. هناك وظائف مصممة خصيصًا للعمل داخل النوافذ (OVER() تصبح إلزامية) والتي تقوم بتعيين أرقام تسلسلية أو مراكز تصنيف.

ولجعلها تعمل وفقًا لمعيار ما، يتعين علينا استخدام جملة ORDER BY داخل OVER().

الثلاثي الترتيب

  1. ROW_NUMBER(): يعين رقمًا تسلسليًا عاديًا (1، 2، 3...) لكل صف، مما يؤدي إلى قطع العلاقات بشكل تعسفي.
  2. RANK(): ينتج تأثير "الأولمبياد": 1، 2، 2، 4. ويترك فجوة (يتم تخطي "3") ويعين نفس المرتبة في حالة التعادل.
  3. DENSE_RANK(): تكثيف الرتب: 1، 2، 2، 3. لا توجد فجوة بعد التعادل.
SQL
SELECT
  product_name,
  price,
  RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;

من خلال الجمع بين PARTITION BY وORDER BY معًا داخل OVER() يمكننا الحصول على "أفضل 3 لكل فئة"!

تمرين#sql.m13.l3.e1
المحاولات: 0جارٍ التحميل…

قم باستخراج "الاسم_الأول" و"الاسم_الأخير" و"المعرف" من جدول العملاء ("العملاء") (بافتراض أن "المعرف" هو رقم المعرف). أضف عمود "الرتبة" باستخدام DENSE_RANK() بناءً على "المعرف" تنازليًا (من الأعلى إلى الأدنى).

جارٍ تحميل المحرر…
إظهار التلميح

DENSE_RANK() OVER(ORDER BY id DESC).

الحل متاح بعد 3 من المحاولات

تمرين#sql.m13.l3.e2
المحاولات: 0جارٍ التحميل…

أنشئ تصنيفًا لكل "category_id" استنادًا إلى سعر المنتجات ("المنتجات"). استخرج "category_id" و"id" و"price" وأضف "price_rank" باستخدام ROW_NUMBER() بترتيب تنازلي "price"، مع التقسيم حسب "category_id".

جارٍ تحميل المحرر…
إظهار التلميح

قم بدمج القسم حسب الفئة_معرف الطلب حسب السعر DESC داخل OVER.

الحل متاح بعد 3 من المحاولات