मुख्य सामग्री पर जाएं
मॉड्यूल 13 · पाठ 3 का 4पाठ्यक्रम में 51/57~15 min
मॉड्यूल पाठ (3/4)

रैंकिंग: ROW_NUMBER, रैंक और DENSE_RANK

रैंकिंग: ROW_NUMBER, रैंक और DENSE_RANK

एकत्रीकरण से परे, विंडो फ़ंक्शंस ऑर्डर और रैंकिंग में चमकते हैं। विंडोज़ के अंदर काम करने के लिए विशेष रूप से डिज़ाइन किए गए फ़ंक्शन हैं (OVER() अनिवार्य हो जाता है) जो अनुक्रमिक संख्याएं या रैंकिंग स्थिति निर्दिष्ट करते हैं।

उन्हें एक मानदंड के विरुद्ध काम करने के लिए, हमें ORDER BY क्लॉज ओवर() के अंदर उपयोग करना होगा।

रैंकिंग तिकड़ी

  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लोड हो रहा है...

ग्राहक तालिका ('ग्राहक') से 'first_name', 'last_name' और 'id' निकालें (मान लें कि 'id' पहचानकर्ता संख्या है)। 'आईडी' अवरोही (उच्चतम से निम्नतम) के आधार पर DENSE_RANK() का उपयोग करके एक 'रैंक' कॉलम जोड़ें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

DENSE_RANK() ओवर (आईडी DESC द्वारा ऑर्डर करें)।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#sql.m13.l3.e2
प्रयास: 0लोड हो रहा है...

उत्पादों ('उत्पाद') की कीमत के आधार पर प्रत्येक 'श्रेणी_आईडी' के लिए एक रैंकिंग बनाएं। 'श्रेणी_आईडी', 'आईडी', 'मूल्य' निकालें और घटते 'मूल्य' क्रम में ROW_NUMBER() का उपयोग करके 'मूल्य_रैंक' जोड़ें, 'श्रेणी_आईडी' द्वारा विभाजन।

संपादक लोड हो रहा है...
संकेत दिखाएँ

ओवर के अंदर श्रेणी_आईडी ऑर्डर द्वारा मूल्य डीईएससी द्वारा विभाजन को संयोजित करें।

3 प्रयासों के बाद समाधान उपलब्ध है