Window Functions

Database Tutorials - এইচ২ ডাটাবেস (H2 Database) H2 এর Advanced Query Techniques |
244
244

Window Functions হল SQL এর একটি শক্তিশালী বৈশিষ্ট্য, যা ডেটাবেজের মধ্যে পরিসংখ্যানগত, সারাংশগত বা রেঙ্কিং অপারেশন করার জন্য ব্যবহৃত হয়। এগুলি সাধারণত এমন ধরনের কুয়েরি তৈরি করতে ব্যবহৃত হয়, যেখানে ডেটার উপর পরবর্তী, পূর্ববর্তী অথবা নির্দিষ্ট সীমানার মধ্যে কাজ করা প্রয়োজন।

Window Functions, Group By বা Aggregate Functions এর তুলনায় আরও উন্নত এবং নমনীয়। এগুলি টেবিলের প্রতিটি রো বা রেকর্ডের জন্য একটি Window বা উইন্ডো তৈরি করে, যার মধ্যে একটি পদ্ধতিগত বিশ্লেষণ করা যায়, যেমন:

  • রাঙ্কিং
  • রানিং টোটাল
  • চলন্ত এভারেজ
  • শীর্ষ এন বা নিম্ন এন মান বের করা

Window Functions এর মূল বৈশিষ্ট্য

  • Partitioning: উইন্ডো ফাংশনগুলি PARTITION BY ক্লজ ব্যবহার করে ডেটা গ্রুপ করতে পারে, যা ডেটাকে বিভিন্ন অংশে ভাগ করে দেয়।
  • Ordering: উইন্ডো ফাংশনগুলি ORDER BY ক্লজের মাধ্যমে ডেটাকে সাজাতে পারে, যা উইন্ডোর ভিতরের ডেটা সঠিকভাবে সাজানোর জন্য ব্যবহার করা হয়।
  • Framing: উইন্ডো ফাংশনগুলি ROWS বা RANGE কিওয়ার্ডের মাধ্যমে উইন্ডোর পরিসীমা নির্ধারণ করতে পারে।

Window Functions এর সিনট্যাক্স

SELECT column1, column2, 
       WINDOW_FUNCTION(column) 
       OVER (PARTITION BY column1 ORDER BY column2 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
FROM table_name;

এখানে:

  • WINDOW_FUNCTION: যেমন, RANK(), ROW_NUMBER(), SUM(), AVG(), ইত্যাদি।
  • PARTITION BY: এটি ডেটাকে বিভিন্ন গ্রুপ বা পার্টিশনে ভাগ করে, একই গ্রুপের মধ্যে উইন্ডো ফাংশন প্রয়োগ করে।
  • ORDER BY: এটি ডেটাকে একটি নির্দিষ্ট ক্রমে সাজায়।
  • ROWS/RANGE: এটি উইন্ডোটি কতটুকু পরিসীমায় কাজ করবে তা নির্ধারণ করে।

Window Functions এর উদাহরণ

১. ROW_NUMBER() ফাংশন

ROW_NUMBER() ফাংশন একটি নির্দিষ্ট অর্ডারে প্রতিটি রেকর্ডকে একটি ইউনিক রাঙ্ক প্রদান করে।

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

এটি employees টেবিল থেকে সমস্ত কর্মচারীকে তাদের salary অনুসারে সাজিয়ে row number প্রদান করবে।

২. RANK() ফাংশন

RANK() ফাংশন একটি নির্দিষ্ট অর্ডারে প্রতিটি রেকর্ডকে র‌্যাংক প্রদান করে, কিন্তু যদি দুটি বা দুটি অধিক রেকর্ড একে অপরের সমান হয়, তাহলে তারা একই র‌্যাংক পায় এবং পরবর্তী র‌্যাংকটি লাফিয়ে চলে।

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

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

৩. DENSE_RANK() ফাংশন

DENSE_RANK() ফাংশনও RANK() এর মতো কাজ করে, তবে এটি কোনও গ্যাপ সৃষ্টি না করে, একই মানের জন্য পরবর্তী র‌্যাংকটি সরাসরি নির্ধারণ করে।

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

এটি salary অনুসারে র‌্যাংক প্রদান করবে, তবে এটি একই salary এর জন্য একটি গ্যাপ তৈরি না করে পরবর্তী র‌্যাংক ধারাবাহিকভাবে প্রদান করবে।

৪. SUM() ফাংশন (Running Total)

SUM() উইন্ডো ফাংশনটি ডেটার একটি চলমান মোট (running total) হিসাব করতে ব্যবহৃত হয়।

SELECT id, name, salary,
       SUM(salary) OVER (ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total
FROM employees;

এটি employees টেবিলের salary-এর চলমান মোট প্রদান করবে, যেখানে প্রতিটি রেকর্ডের সাথে আগের সকল রেকর্ডের মোট যোগ করা হবে।

৫. AVG() ফাংশন (Running Average)

AVG() ফাংশনটি চলমান গড় হিসাব করতে ব্যবহৃত হয়।

SELECT id, name, salary,
       AVG(salary) OVER (ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_avg
FROM employees;

এটি কর্মচারীদের salary-এর চলমান গড় হিসাব করবে।

৬. LEAD() এবং LAG() ফাংশন

  • LEAD() ফাংশনটি বর্তমান রেকর্ডের পরে থাকা রেকর্ডটি দেখায়।
  • LAG() ফাংশনটি বর্তমান রেকর্ডের পূর্ববর্তী রেকর্ডটি দেখায়।
SELECT id, name, salary,
       LEAD(salary) OVER (ORDER BY salary) AS next_salary,
       LAG(salary) OVER (ORDER BY salary) AS previous_salary
FROM employees;

এটি কর্মচারীদের salary দেখানোর পাশাপাশি, পরবর্তী এবং পূর্ববর্তী salary ও দেখাবে।

Window Functions এর ব্যবহার ক্ষেত্রে

  1. Running Total বা Moving Average: যখন আপনাকে কোনও কলামের মোট বা গড়ের চলমান মান বের করতে হয়।
  2. Ranking: র‌্যাংকিং সিস্টেমে যেমন, খেলোয়াড়ের র‌্যাংক, পারফরম্যান্স র‌্যাংকিং ইত্যাদি।
  3. Top-N Queries: এক বা একাধিক কলামের শীর্ষ এন মান বের করতে ব্যবহৃত হয়, যেমন শীর্ষ ৫ টা কর্মচারী যাদের সর্বোচ্চ বেতন।
  4. Comparing Rows: বর্তমান রেকর্ডের সাথে পূর্ববর্তী বা পরবর্তী রেকর্ডের তুলনা করার জন্য ব্যবহৃত হয়।

সারাংশ

Window Functions SQL-এর একটি শক্তিশালী ফিচার, যা ডেটাবেজে পরিসংখ্যানগত বা বিশ্লেষণমূলক অপারেশনগুলো করার জন্য ব্যবহার করা হয়। ROW_NUMBER(), RANK(), SUM(), LEAD(), LAG() ইত্যাদি ফাংশনগুলো ডেটার উপর বিভিন্ন ধরনের বিশ্লেষণ করতে ব্যবহৃত হয়, যেমন চলমান গড়, মোট, র‌্যাংকিং, এবং পূর্ববর্তী বা পরবর্তী রেকর্ডের সাথে তুলনা করা। এগুলি টেবিলের প্রতিটি রেকর্ডের জন্য আলাদাভাবে কাজ করে এবং ডেটাবেজে আরও শক্তিশালী, মডুলার এবং নমনীয় কুয়েরি তৈরি করতে সাহায্য করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion