মূল কন্টেন্টে যান
মডিউল 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;

OVER() এর ভিতরে PARTITION BY এবং ORDER BY একত্রিত করে আমরা "প্রতিটি বিভাগের জন্য সেরা 3" পেতে পারি!

ব্যায়াম#sql.m13.l3.e1
প্রচেষ্টা: 0লোড হচ্ছে...

গ্রাহকদের টেবিল ('গ্রাহক') থেকে 'first_name', 'last_name' এবং 'id' বের করুন (ধরুন 'id' হল শনাক্তকারী নম্বর)। 'আইডি' অবরোহ (সর্বোচ্চ থেকে সর্বনিম্ন) এর উপর ভিত্তি করে DENSE_RANK() ব্যবহার করে একটি 'র্যাঙ্ক' কলাম যোগ করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

DENSE_RANK() OVER (ID DESC দ্বারা অর্ডার করুন)।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#sql.m13.l3.e2
প্রচেষ্টা: 0লোড হচ্ছে...

পণ্যের ('পণ্য') মূল্যের উপর ভিত্তি করে প্রতিটি 'শ্রেণী_আইডি'-এর জন্য একটি র‌্যাঙ্কিং তৈরি করুন। 'category_id', 'id', 'price' বের করুন এবং ROW_NUMBER() ব্যবহার করে 'price_rank' যোগ করুন নিচের 'price' ক্রমে, 'category_id' দ্বারা বিভাজন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ওভারের ভিতরে DESC মূল্য অনুসারে বিভাগ_আইডি অনুসারে পার্টিশন একত্রিত করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ