Window Functions হল SQL এর একটি শক্তিশালী বৈশিষ্ট্য, যা ডেটাবেজের মধ্যে পরিসংখ্যানগত, সারাংশগত বা রেঙ্কিং অপারেশন করার জন্য ব্যবহৃত হয়। এগুলি সাধারণত এমন ধরনের কুয়েরি তৈরি করতে ব্যবহৃত হয়, যেখানে ডেটার উপর পরবর্তী, পূর্ববর্তী অথবা নির্দিষ্ট সীমানার মধ্যে কাজ করা প্রয়োজন।
Window Functions, Group By বা Aggregate Functions এর তুলনায় আরও উন্নত এবং নমনীয়। এগুলি টেবিলের প্রতিটি রো বা রেকর্ডের জন্য একটি Window বা উইন্ডো তৈরি করে, যার মধ্যে একটি পদ্ধতিগত বিশ্লেষণ করা যায়, যেমন:
SELECT column1, column2,
WINDOW_FUNCTION(column)
OVER (PARTITION BY column1 ORDER BY column2 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM table_name;
এখানে:
RANK()
, ROW_NUMBER()
, SUM()
, AVG()
, ইত্যাদি।ROW_NUMBER()
ফাংশন একটি নির্দিষ্ট অর্ডারে প্রতিটি রেকর্ডকে একটি ইউনিক রাঙ্ক প্রদান করে।
SELECT id, name,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
FROM employees;
এটি employees
টেবিল থেকে সমস্ত কর্মচারীকে তাদের salary অনুসারে সাজিয়ে row number প্রদান করবে।
RANK()
ফাংশন একটি নির্দিষ্ট অর্ডারে প্রতিটি রেকর্ডকে র্যাংক প্রদান করে, কিন্তু যদি দুটি বা দুটি অধিক রেকর্ড একে অপরের সমান হয়, তাহলে তারা একই র্যাংক পায় এবং পরবর্তী র্যাংকটি লাফিয়ে চলে।
SELECT id, name, salary,
RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees;
এটি কর্মচারীদের salary অনুসারে র্যাংক প্রদান করবে। যদি দুটি কর্মচারীর একই salary থাকে, তাদের একই র্যাংক দেয়া হবে, এবং পরবর্তী র্যাংকটি এক নম্বর বেশি হবে।
DENSE_RANK()
ফাংশনও RANK()
এর মতো কাজ করে, তবে এটি কোনও গ্যাপ সৃষ্টি না করে, একই মানের জন্য পরবর্তী র্যাংকটি সরাসরি নির্ধারণ করে।
SELECT id, name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;
এটি salary অনুসারে র্যাংক প্রদান করবে, তবে এটি একই salary এর জন্য একটি গ্যাপ তৈরি না করে পরবর্তী র্যাংক ধারাবাহিকভাবে প্রদান করবে।
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()
ফাংশনটি চলমান গড় হিসাব করতে ব্যবহৃত হয়।
SELECT id, name, salary,
AVG(salary) OVER (ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_avg
FROM employees;
এটি কর্মচারীদের salary-এর চলমান গড় হিসাব করবে।
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 SQL-এর একটি শক্তিশালী ফিচার, যা ডেটাবেজে পরিসংখ্যানগত বা বিশ্লেষণমূলক অপারেশনগুলো করার জন্য ব্যবহার করা হয়। ROW_NUMBER()
, RANK()
, SUM()
, LEAD()
, LAG()
ইত্যাদি ফাংশনগুলো ডেটার উপর বিভিন্ন ধরনের বিশ্লেষণ করতে ব্যবহৃত হয়, যেমন চলমান গড়, মোট, র্যাংকিং, এবং পূর্ববর্তী বা পরবর্তী রেকর্ডের সাথে তুলনা করা। এগুলি টেবিলের প্রতিটি রেকর্ডের জন্য আলাদাভাবে কাজ করে এবং ডেটাবেজে আরও শক্তিশালী, মডুলার এবং নমনীয় কুয়েরি তৈরি করতে সাহায্য করে।
common.read_more