دروس الوحدة (3/4)
التصنيفات: ROW_NUMBER وRANK وDENSE_RANK
التصنيفات: ROW_NUMBER وRANK وDENSE_RANK
وبعيدًا عن التجميع، تتألق وظائف النافذة في الترتيب والتصنيف. هناك وظائف مصممة خصيصًا للعمل داخل النوافذ (OVER() تصبح إلزامية) والتي تقوم بتعيين أرقام تسلسلية أو مراكز تصنيف.
ولجعلها تعمل وفقًا لمعيار ما، يتعين علينا استخدام جملة ORDER BY داخل OVER().
الثلاثي الترتيب
ROW_NUMBER(): يعين رقمًا تسلسليًا عاديًا (1، 2، 3...) لكل صف، مما يؤدي إلى قطع العلاقات بشكل تعسفي.RANK(): ينتج تأثير "الأولمبياد": 1، 2، 2، 4. ويترك فجوة (يتم تخطي "3") ويعين نفس المرتبة في حالة التعادل.DENSE_RANK(): تكثيف الرتب: 1، 2، 2، 3. لا توجد فجوة بعد التعادل.
SELECT
product_name,
price,
RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;من خلال الجمع بين PARTITION BY وORDER BY معًا داخل OVER() يمكننا الحصول على "أفضل 3 لكل فئة"!
قم باستخراج "الاسم_الأول" و"الاسم_الأخير" و"المعرف" من جدول العملاء ("العملاء") (بافتراض أن "المعرف" هو رقم المعرف). أضف عمود "الرتبة" باستخدام DENSE_RANK() بناءً على "المعرف" تنازليًا (من الأعلى إلى الأدنى).
إظهار التلميح
DENSE_RANK() OVER(ORDER BY id DESC).
الحل متاح بعد 3 من المحاولات
أنشئ تصنيفًا لكل "category_id" استنادًا إلى سعر المنتجات ("المنتجات"). استخرج "category_id" و"id" و"price" وأضف "price_rank" باستخدام ROW_NUMBER() بترتيب تنازلي "price"، مع التقسيم حسب "category_id".
إظهار التلميح
قم بدمج القسم حسب الفئة_معرف الطلب حسب السعر DESC داخل OVER.
الحل متاح بعد 3 من المحاولات