Database Tutorials Window Functions (ROW_NUMBER, RANK, DENSE_RANK) গাইড ও নোট

270

SQL Window Functions হল বিশেষ ধরনের ফাংশন যা ডেটাকে একটি "window" (অথবা "frame") এর মধ্যে প্রক্রিয়া করে এবং সেই ফ্রেমে পৃষ্ঠার রেকর্ডে গণনা বা বিশ্লেষণ করার সুযোগ দেয়। এই ফাংশনগুলি, সাধারণত, ORDER BY ক্লজ এবং PARTITION BY ক্লজের সাথে ব্যবহৃত হয়, যা ডেটাকে বিভাগ বা অংশে বিভক্ত করে এবং সেই অংশে পরিসংখ্যান বা গণনা করে।

ROW_NUMBER, RANK, এবং DENSE_RANK হল জনপ্রিয় Window Functions, যা একটি টেবিলের মধ্যে রেকর্ডগুলির জন্য একে অপরের সাথে তুলনা করতে সহায়তা করে এবং তাদের র‌্যাঙ্ক বা অবস্থান নির্ধারণ করে।


১. ROW_NUMBER()

ROW_NUMBER() একটি Window Function যা প্রতিটি রেকর্ডের জন্য একটি সুনির্দিষ্ট সংখ্যা বা র‌্যাঙ্ক নির্ধারণ করে, যা সাধারণত টেবিলের অর্ডার অনুসারে (যেমন, অ্যাজেন্ডিং বা ডেসেন্ডিং)। এটি একটি ইউনিক র‌্যাঙ্ক দেয় এবং কখনোই ডুপ্লিকেট র‌্যাঙ্ক তৈরি করে না।

ROW_NUMBER() এর ব্যবহার:

SELECT column1, column2, ROW_NUMBER() OVER (ORDER BY column1) AS row_num
FROM table_name;
  • ROW_NUMBER(): প্রতিটি রেকর্ডের জন্য একটি ইউনিক র‌্যাঙ্ক প্রদান করে।
  • OVER (ORDER BY column1): ডেটাকে নির্দিষ্ট একটি কলাম অনুসারে অর্ডার করে।

উদাহরণ:

SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;

এখানে, salary অনুসারে প্রত্যেক কর্মচারীর একটি র‌্যাঙ্ক দেয়া হবে, এবং সবচেয়ে বেশি বেতনপ্রাপ্ত কর্মচারীকে 1 নম্বর র‌্যাঙ্ক দেয়া হবে।


২. RANK()

RANK() একটি Window Function যা প্রতিটি রেকর্ডের জন্য একটি র‌্যাঙ্ক প্রদান করে। তবে, যদি দুটি বা তার বেশি রেকর্ডের একই মান থাকে, তাহলে RANK() তাদের একই র‌্যাঙ্ক দেয় এবং পরবর্তী র‌্যাঙ্কটি লাফিয়ে চলে।

  • ডুপ্লিকেট র‌্যাঙ্ক: যদি দুটি রেকর্ডের মান একই হয়, তাহলে তারা একই র‌্যাঙ্ক পাবে, কিন্তু পরবর্তী র‌্যাঙ্কে একটি "লাফ" হবে (যেমন, দুটি রেকর্ড যদি 1 নম্বর র‌্যাঙ্ক পায়, তাহলে পরবর্তী রেকর্ডটি 3 নম্বর র‌্যাঙ্ক পাবে)।

RANK() এর ব্যবহার:

SELECT column1, column2, RANK() OVER (ORDER BY column1 DESC) AS rank
FROM table_name;

উদাহরণ:

SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;

এখানে, salary অনুসারে কর্মচারীদের র‌্যাঙ্ক দেয়া হবে। যদি দুটি কর্মচারীর বেতন সমান হয়, তারা একই র‌্যাঙ্ক পাবে এবং পরবর্তী র‌্যাঙ্কে "লাফ" হবে।

আউটপুট উদাহরণ:

namesalaryrank
John50001
Alice40002
Bob40002
Steve30004

এখানে, Alice এবং Bob এর বেতন সমান হওয়ায় তাদের র‌্যাঙ্ক 2 এবং পরবর্তী কর্মচারী, Steve, র‌্যাঙ্ক 4 পেয়েছে।


৩. DENSE_RANK()

DENSE_RANK() হল একটি Window Function যা RANK() এর মতো কাজ করে, তবে এখানে কোনো "লাফ" বা শূন্য র‌্যাঙ্ক থাকে না। অর্থাৎ, যখন দুটি রেকর্ডের মান একই হয়, তারা একই র‌্যাঙ্ক পায়, তবে পরবর্তী র‌্যাঙ্ক আগের র‌্যাঙ্কের পরবর্তী মান হবে।

  • ডুপ্লিকেট র‌্যাঙ্ক: যদি দুটি রেকর্ডের মান একই হয়, তারা একই র‌্যাঙ্ক পাবে এবং পরবর্তী র‌্যাঙ্কটি আগের র‌্যাঙ্কের পরবর্তী সংখ্যা হবে (যেমন, দুটি রেকর্ড যদি 1 নম্বর র‌্যাঙ্ক পায়, পরবর্তী রেকর্ডটি 2 নম্বর র‌্যাঙ্ক পাবে)।

DENSE_RANK() এর ব্যবহার:

SELECT column1, column2, DENSE_RANK() OVER (ORDER BY column1 DESC) AS dense_rank
FROM table_name;

উদাহরণ:

SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;

এখানে, salary অনুসারে কর্মচারীদের র‌্যাঙ্ক দেয়া হবে, এবং কোনো লাফ থাকবে না—যেমন, দুটি কর্মচারী যদি একই বেতন পান, তাদের পরবর্তী র‌্যাঙ্ক পরবর্তী সংখ্যা হবে।

আউটপুট উদাহরণ:

namesalarydense_rank
John50001
Alice40002
Bob40002
Steve30003

এখানে, Alice এবং Bob এর বেতন সমান, তাদের র‌্যাঙ্ক 2 হবে, এবং পরবর্তী কর্মচারী Steve র‌্যাঙ্ক 3 পাবে (এটি RANK() এর থেকে আলাদা, যেখানে Steve র‌্যাঙ্ক 4 পেতো)।


ROW_NUMBER(), RANK(), এবং DENSE_RANK() এর মধ্যে পার্থক্য:

ফাংশনব্যবহারপার্থক্য
ROW_NUMBER()প্রতিটি রেকর্ডের জন্য একটি ইউনিক র‌্যাঙ্ক প্রদান করেকখনোই ডুপ্লিকেট র‌্যাঙ্ক হয় না, সবসময় ইউনিক র‌্যাঙ্ক
RANK()সমান মানের জন্য একযোগে একই র‌্যাঙ্ক দেয়, তবে পরবর্তী র‌্যাঙ্কে "লাফ" হয়সমান মানের জন্য এক র‌্যাঙ্ক এবং পরবর্তী র‌্যাঙ্কে লাফ
DENSE_RANK()সমান মানের জন্য একই র‌্যাঙ্ক দেয় এবং পরবর্তী র‌্যাঙ্কে কোনো "লাফ" নেইসমান মানের জন্য একই র‌্যাঙ্ক, পরবর্তী র‌্যাঙ্ক আগের র‌্যাঙ্কের পরবর্তী সংখ্যা

উপসংহার:

  • ROW_NUMBER(): ইউনিক র‌্যাঙ্ক, কখনোই ডুপ্লিকেট র‌্যাঙ্ক হয় না।
  • RANK(): সমান মানের জন্য এক র‌্যাঙ্ক, পরবর্তী র‌্যাঙ্কে "লাফ"।
  • DENSE_RANK(): সমান মানের জন্য এক র‌্যাঙ্ক, পরবর্তী র‌্যাঙ্কের কোনো লাফ নেই।

এই ফাংশনগুলি সাধারণত PARTITION BY এবং ORDER BY এর সাথে ব্যবহার করা হয়, যাতে ডেটার একটি নির্দিষ্ট অংশে কাজ করা যায় এবং সঠিকভাবে র‌্যাঙ্ক নির্ধারণ করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...