Window Functions এবং তাদের ব্যবহার

Database Tutorials - অ্যাপাচি প্রেস্টো (Apache Presto) Advanced Presto Query Techniques |
221
221

Window Functions হল SQL ফাংশনের একটি বিশেষ শ্রেণী যা রেকর্ডের একটি সেট বা "window" এর উপর ভিত্তি করে গণনা করে এবং প্রতিটি রেকর্ডের জন্য একটি নির্দিষ্ট আউটপুট প্রদান করে। এগুলি সাধারণভাবে লিডিং এবং ল্যাগিং (ফলক এবং পূর্ববর্তী রেকর্ডের সাথে তুলনা), রানিং টোটাল, রেটিং, এবং ডেনসিটি গণনার জন্য ব্যবহৃত হয়।

Presto তে Window Functions খুবই শক্তিশালী এবং স্কেলেবল পদ্ধতি হিসেবে কাজ করে। এটি আপনাকে একটি নির্দিষ্ট ভিউ বা উইন্ডোর মধ্যে ডেটার উপর গণনা করার সুযোগ দেয়, যা খুবই উপকারী যখন আপনি কোনও নির্দিষ্ট রেঞ্জ বা শর্তের মধ্যে কাজ করতে চান।


Window Functions এর মৌলিক ধারণা

  • Window Functions সাধারণত OVER() ক্লজ সহ ব্যবহৃত হয়। এই ক্লজটি প্রথম বা শেষ রেকর্ডের তুলনা, অথবা একটি চলন্ত গড় বা মোট বের করতে সাহায্য করে।
  • Window হল একটি নির্দিষ্ট অংশ বা শর্তাবলী যা আপনি বিশ্লেষণ করতে চান। এটি সাধারণত একটি PARTITION BY এবং ORDER BY সেগমেন্ট দ্বারা সীমাবদ্ধ থাকে।
  • PARTITION BY কলামটি উইন্ডো বা গ্রুপিং নির্ধারণ করে এবং ORDER BY উইন্ডোতে রেকর্ডগুলির সঠিক অর্ডার চিহ্নিত করে।

Window Functions এর ধরন

Presto তে বেশ কিছু জনপ্রিয় Window Functions রয়েছে, যা ডেটার উপর বিশ্লেষণ এবং গণনা করতে ব্যবহৃত হয়। এর মধ্যে অন্যতম:

  1. ROW_NUMBER()
  2. RANK()
  3. DENSE_RANK()
  4. NTILE()
  5. LEAD()
  6. LAG()
  7. FIRST_VALUE()
  8. LAST_VALUE()
  9. SUM() (over a window)
  10. AVG() (over a window)

১. ROW_NUMBER()

ROW_NUMBER() ফাংশনটি একটি রেকর্ড সেটের মধ্যে প্রতিটি রেকর্ডের জন্য একটি ইউনিক নম্বর প্রদান করে, এটি প্রতিটি রেকর্ডকে একটি নির্দিষ্ট ক্রমে নংকিত করে।

ব্যবহার:

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

এই কোয়েরিটি কর্মচারীদের বেতনের ভিত্তিতে তাদেরকে একটি ক্রমবদ্ধ নম্বর প্রদান করবে।


২. RANK()

RANK() ফাংশনটি রেকর্ডগুলির মধ্যে রেঙ্কিং প্রদান করে। তবে, এটি একটি সাধারণ নম্বর নিকালবে, যেখানে একাধিক রেকর্ড একই রেঙ্ক শেয়ার করতে পারে।

ব্যবহার:

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

এটি কর্মচারীদের বেতনের ভিত্তিতে তাদের রেঙ্ক প্রদান করবে, তবে দুটি কর্মচারীর যদি সমান বেতন থাকে, তারা সমান রেঙ্ক পাবে এবং পরবর্তী রেঙ্কটি এক পদস্খলিত হবে।


৩. DENSE_RANK()

DENSE_RANK() ফাংশনটি RANK() এর মতো কাজ করে, তবে এটি দুটি বা তার বেশি সমান রেকর্ডের জন্য রেঙ্কের মধ্যে গ্যাপ না রেখে সন্নিবেশ ঘটায়।

ব্যবহার:

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

এই কোয়েরি কর্মচারীদের বেতনের ভিত্তিতে রেঙ্ক প্রদান করবে, তবে যদি দুটি কর্মচারীর সমান বেতন থাকে, তারা একই রেঙ্ক পাবে এবং পরবর্তী রেঙ্কটি ধারাবাহিকভাবে প্রদর্শিত হবে।


৪. NTILE()

NTILE() ফাংশনটি রেকর্ডগুলিকে একটি নির্দিষ্ট সংখ্যক ভাগে ভাগ করে দেয় (যেমন 4টি ভাগে ভাগ করা), এবং প্রতিটি ভাগের জন্য একটি নং প্রদান করে।

ব্যবহার:

SELECT name, salary,
       NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM employees;

এই কোয়েরিটি কর্মচারীদের বেতন অনুযায়ী তাদের চারটি সমান ভাগে ভাগ করবে এবং প্রতিটি ভাগের জন্য একটি সংখ্যা প্রদান করবে।


৫. LEAD()

LEAD() ফাংশনটি বর্তমান রেকর্ডের পরে থাকা রেকর্ডের মান ফেরত দেয়। এটি ব্যবহার করে আপনি বর্তমান রেকর্ডের তুলনায় পরবর্তী রেকর্ডের মান বিশ্লেষণ করতে পারেন।

ব্যবহার:

SELECT name, salary,
       LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary
FROM employees;

এই কোয়েরিটি কর্মচারীর বর্তমান বেতন এবং পরবর্তী কর্মচারীর বেতন প্রদান করবে।


৬. LAG()

LAG() ফাংশনটি LEAD() এর বিপরীত কাজ করে, যেখানে এটি বর্তমান রেকর্ডের পূর্ববর্তী রেকর্ডের মান ফেরত দেয়।

ব্যবহার:

SELECT name, salary,
       LAG(salary, 1) OVER (ORDER BY salary DESC) AS prev_salary
FROM employees;

এই কোয়েরিটি কর্মচারীর বর্তমান বেতন এবং তার আগের কর্মচারীর বেতন প্রদান করবে।


৭. FIRST_VALUE()

FIRST_VALUE() ফাংশনটি একটি উইন্ডো বা অংশের মধ্যে প্রথম মান প্রদান করে।

ব্যবহার:

SELECT name, salary,
       FIRST_VALUE(salary) OVER (ORDER BY salary DESC) AS highest_salary
FROM employees;

এটি কর্মচারীদের মধ্যে প্রথম মান (সর্বোচ্চ বেতন) প্রদান করবে, যেহেতু বেতন ডেসক্রিং অর্ডারে সজ্জিত।


৮. LAST_VALUE()

LAST_VALUE() ফাংশনটি একটি উইন্ডো বা অংশের মধ্যে সর্বশেষ মান প্রদান করে।

ব্যবহার:

SELECT name, salary,
       LAST_VALUE(salary) OVER (ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lowest_salary
FROM employees;

এটি কর্মচারীদের মধ্যে সর্বশেষ মান (নিম্নতম বেতন) প্রদান করবে।


৯. SUM() এবং AVG() Window Functions হিসেবে

SUM() এবং AVG() ফাংশনগুলি Window Functions হিসেবেও ব্যবহার করা যায়, যেখানে আপনি নির্দিষ্ট উইন্ডো বা অংশের উপর সন্নিবেশ ও গড় হিসাব করতে পারেন।

ব্যবহার:

SELECT name, salary,
       SUM(salary) OVER (PARTITION BY department ORDER BY salary DESC) AS department_salary_total,
       AVG(salary) OVER (PARTITION BY department) AS department_avg_salary
FROM employees;

এই কোয়েরিটি প্রতিটি বিভাগের জন্য মোট বেতন এবং গড় বেতন হিসাব করবে।


সারাংশ

Window Functions SQL এর একটি শক্তিশালী টুল যা আপনাকে একাধিক রেকর্ডের উপর ভিত্তি করে বিভিন্ন ধরনের বিশ্লেষণ এবং গণনা করার সুযোগ দেয়। এগুলি বিশ্লেষণাত্মক ফাংশন যেমন RANK(), LEAD(), LAG(), এবং SUM() সহ ব্যবহার করা হয়। Presto তে Window Functions ব্যবহার করে আপনি কার্যকরী এবং দক্ষ ডেটা বিশ্লেষণ করতে পারেন, যা বিশেষত বড় ডেটাসেট বিশ্লেষণের জন্য অত্যন্ত কার্যকরী।

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

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

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

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