Window Functions হল SQL ফাংশন যা ডেটার একটি উইন্ডো বা অংশের মধ্যে গণনা বা বিশ্লেষণ করতে ব্যবহৃত হয়, যেখানে আপনি একটি গ্রুপ বা সম্পূর্ণ টেবিলের উপর ভিত্তি করে নির্দিষ্ট পরিসরে ক্যালকুলেশন করতে পারেন। এগুলি সাধারণত তুলনামূলক বিশ্লেষণ, অ্যারেঞ্জমেন্ট বা র্যাঙ্কিং এর জন্য ব্যবহৃত হয়।
Window Function ব্যবহার করার মাধ্যমে, আপনি কোনো নির্দিষ্ট রেকর্ড বা গ্রুপের সাথে সম্পর্কিত ডেটার উপর গণনা, অর্থাৎ মোট, গড়, মিনিমাম, ম্যাক্সিমাম, র্যাঙ্ক, রোলিং এভারেজ ইত্যাদি ক্যালকুলেট করতে পারেন, কিন্তু এতে গ্রুপ বাই (GROUP BY) ব্যবহারের প্রয়োজন নেই। এই ফাংশনগুলি টেবিলের প্রতিটি রেকর্ডের জন্য একটি পিরিওডিক ক্যালকুলেশন সম্পাদন করে, তবে এটি অন্যান্য রেকর্ডগুলির উপর প্রভাব ফেলে না।
Window Function এর মূল বৈশিষ্ট্য
- Row-level Calculation: উইন্ডো ফাংশন প্রতিটি রেকর্ডের উপর গণনা করে, যেখানে "window" নির্ধারণ করে যে ক্যালকুলেশনটি কোন ডেটার অংশের উপর করতে হবে।
- Partitioning: উইন্ডো ফাংশনগুলিতে PARTITION BY ব্যবহার করা যেতে পারে, যার মাধ্যমে আপনি ডেটাকে গ্রুপে ভাগ করতে পারেন এবং তারপর প্রতিটি গ্রুপের জন্য আলাদা ক্যালকুলেশন করতে পারেন।
- Ordering: উইন্ডো ফাংশন ব্যবহার করে ORDER BY প্রয়োগ করতে পারেন, যার মাধ্যমে রেকর্ডগুলিকে সাজানো যায় এবং নির্দিষ্ট অর্ডারে ক্যালকুলেশন করা হয়।
- Frame Specification: উইন্ডো ফাংশন ব্যবহার করে ROWS BETWEEN বা RANGE BETWEEN ডিফাইন করা যায়, যা ক্যালকুলেশনের পরিসর নির্ধারণ করতে সাহায্য করে।
Window Functions এর কিছু উদাহরণ
১. ROW_NUMBER():
এই ফাংশনটি প্রতিটি রেকর্ডের জন্য একটি ইউনিক সিকোয়েন্স নাম্বার (row number) অ্যাসাইন করে, যা নির্দিষ্ট অর্ডারে সাজানো রেকর্ডগুলির জন্য ব্যবহার করা হয়।
Example:
SELECT employee_id, employee_name, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;
এই কুয়েরি দিয়ে আপনি সব কর্মচারীকে তাদের বেতন অনুসারে সাজিয়ে একটি সিকোয়েন্স নাম্বার পাবেন।
২. RANK():
এই ফাংশনটি প্রতিটি রেকর্ডকে একটি র্যাঙ্ক প্রদান করে, কিন্তু যখন দুটি রেকর্ডের মান সমান থাকে, তখন উভয়কে একই র্যাঙ্ক দেওয়া হয় এবং পরবর্তী রেকর্ডের র্যাঙ্কে প্রভাব ফেলে।
Example:
SELECT employee_id, employee_name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
এখানে, কর্মচারীদের বেতন অনুযায়ী র্যাঙ্ক প্রদান করা হবে, যেখানে সমান বেতনযুক্ত কর্মচারীরা একই র্যাঙ্ক পাবেন।
৩. DENSE_RANK():
এই ফাংশনটি RANK() এর মতো, তবে এখানে সমান রেকর্ডগুলির র্যাঙ্কে কোনো ফাঁকা সংখ্যা দেয়া হয় না। অর্থাৎ, পরবর্তী রেকর্ডটি আগের র্যাঙ্কের পরবর্তী র্যাঙ্ক পাবে।
Example:
SELECT employee_id, employee_name, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;
এই কুয়েরি ব্যবহারে, সমান বেতন থাকা কর্মচারীদের র্যাঙ্কে কোনো ফাঁকা রাখা হবে না।
৪. SUM() WITH WINDOW:
এটি একটি সাধারণ উইন্ডো ফাংশন যা একটি নির্দিষ্ট উইন্ডোর মধ্যে মোট মান ক্যালকুলেট করতে ব্যবহৃত হয়। সাধারণত এটি ব্যবহার করা হয় চলমান বা রোলিং অ্যাগ্রিগেট হিসেবে।
Example:
SELECT employee_id, salary,
SUM(salary) OVER (PARTITION BY department ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total
FROM employees;
এখানে, প্রতি কর্মচারীর জন্য একটি running total তৈরি হচ্ছে, যা তাদের বেতন অনুসারে সাজানো হচ্ছে এবং প্রতিটি কর্মচারীর আগের সব কর্মচারীর মোট বেতন যোগ করা হচ্ছে।
৫. AVG() WITH WINDOW:
এই ফাংশনটি একটি নির্দিষ্ট উইন্ডোর মধ্যে গড় ক্যালকুলেট করতে ব্যবহৃত হয়।
Example:
SELECT employee_id, department, salary,
AVG(salary) OVER (PARTITION BY department) AS avg_salary
FROM employees;
এই কুয়েরি দিয়ে আপনি প্রতিটি বিভাগের গড় বেতন দেখতে পাবেন, যেখানে PARTITION BY বিভাগ অনুযায়ী ডেটা ভাগ করছে।
Analytics Queries in Teradata
Analytics Queries হল SQL কুয়েরি যা বিশ্লেষণাত্মক কাজগুলো, যেমন ডেটা র্যাঙ্কিং, ট্রেন্ড বিশ্লেষণ, চলমান গড়, এবং তুলনামূলক বিশ্লেষণ করার জন্য ব্যবহৃত হয়। উইন্ডো ফাংশনগুলির মাধ্যমে এই ধরনের কুয়েরি তৈরি করা হয়, যা বিভিন্ন ডেটা গ্রুপের জন্য ডেটার সম্পর্ক বিশ্লেষণ করতে সাহায্য করে।
উদাহরণ ১: Rolling Average Calculation:
ধরা যাক, আপনি একটি স্টোরের প্রতিদিনের বিক্রয় ডেটা বিশ্লেষণ করছেন এবং প্রতি তিনদিনের জন্য গড় বিক্রয় নির্ধারণ করতে চান।
Example:
SELECT sale_date, amount,
AVG(amount) OVER (ORDER BY sale_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS rolling_avg
FROM sales;
এখানে, প্রতিটি দিনে আগের দুই দিনের সাথে গড় বের করা হচ্ছে।
উদাহরণ ২: Year-over-Year Comparison:
এখানে, আপনি বছরের তুলনায় বছরের বিক্রয় পরিমাণ কম্পেয়ার করতে চান।
Example:
SELECT sale_date, amount,
SUM(amount) OVER (PARTITION BY EXTRACT(YEAR FROM sale_date)) AS yearly_total,
amount / SUM(amount) OVER (PARTITION BY EXTRACT(YEAR FROM sale_date)) AS percentage_of_year
FROM sales;
এই কুয়েরির মাধ্যমে, আপনি দেখতে পাবেন যে প্রতিটি বিক্রয় বছরে মোট বিক্রয়ের কত শতাংশ অবদান রাখছে।
সারাংশ
Window Functions টেরাডেটা ডেটাবেসের অত্যন্ত শক্তিশালী ফিচার যা ডেটার অংশবিশেষ বা উইন্ডো ব্যবহার করে ক্যালকুলেশন করতে সহায়তা করে। এটি র্যাঙ্কিং, অ্যাগ্রিগেট ফাংশন, এবং চলমান বিশ্লেষণ পরিচালনা করতে ব্যবহৃত হয়। Analytics Queries উইন্ডো ফাংশনের সাহায্যে বড় ডেটাসেটের মধ্যে ট্রেন্ড বিশ্লেষণ এবং তুলনামূলক বিশ্লেষণ সম্পন্ন করতে সক্ষম। টেরাডেটায় উইন্ডো ফাংশনগুলি ব্যবহার করে জটিল এবং সময়সাপেক্ষ বিশ্লেষণ দ্রুত এবং কার্যকরভাবে করা যায়।
Read more