مرکزی مواد پر جائیں
ماڈیول 13 · سبق 3 از 4کورس میں 51/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لوڈ ہو رہا ہے…

کسٹمرز ٹیبل ('کسٹمرز') سے 'first_name'، 'last_name' اور 'id' نکالیں (فرض کریں 'id' شناخت کنندہ نمبر ہے)۔ DENSE_RANK() کا استعمال کرتے ہوئے 'id' کے نزول کی بنیاد پر ایک 'درجہ' کالم شامل کریں (اعلی سے کم تک)۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

DENSE_RANK() OVER(ID DESC کے مطابق آرڈر)۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#sql.m13.l3.e2
کوششیں: 0لوڈ ہو رہا ہے…

مصنوعات ('مصنوعات') کی قیمت کی بنیاد پر ہر ایک 'کیٹگری_آئی ڈی' کے لیے درجہ بندی بنائیں۔ 'category_id'، 'id'، 'price' نکالیں اور ROW_NUMBER() کا استعمال کرتے ہوئے 'price_rank' کو نزولی 'price' ترتیب میں شامل کریں، 'category_id' کے حساب سے تقسیم کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

OVER کے اندر BY category_id ORDER BY DESC قیمت کے لحاظ سے پارٹیشن کو یکجا کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔