মূল কন্টেন্টে যান
মডিউল 13 · 1-এর পাঠ 4কোর্সে 49/57~15 min
মডিউল পাঠ (1/4)

ভূমিকা এবং ওভার ক্লজ

ভূমিকা এবং ওভার ক্লজ

আগের পাঠে আমরা দেখেছি কিভাবে GROUP BY ব্যবহার করতে হয় ডেটা একত্রিত করতে। যাইহোক, GROUP BY এর একটি বিশাল সীমাবদ্ধতা রয়েছে: এটি সারিগুলি ভেঙে দেয়। আপনি যদি শহর অনুসারে গোষ্ঠীবদ্ধ হন, আপনি প্রতি শহরে একটি একক সারি পাবেন এবং পৃথক গ্রাহকদের বিবরণ হারাবেন।

এখানেই উইন্ডো ফাংশন কার্যকর হয়। মূল সারিগুলি রাখার সময় তারা আপনাকে মোট গণনা চালাতে দেয় (যেমন যোগফল বা গড়)।

ওভার() ধারা

ম্যাজিক কীওয়ার্ড হল OVER()। এটি ডাটাবেসকে বলে যে সামগ্রিক ফাংশন (যেমন SUM, AVG, COUNT) একটি উইন্ডো ফাংশন হিসাবে গণ্য করা উচিত, পুরো ফলাফল সেটের (গ্লোবাল "উইন্ডো") উপর গণনা করা হয়েছে কিন্তু প্রতিটি একক সারিতে প্রয়োগ করা হয়েছে এবং ফিরে এসেছে৷

SQL
SELECT
  order_id,
  total_amount,
  AVG(total_amount) OVER() AS global_average
FROM orders;

এই উদাহরণে, আমরা প্রতিটি স্বতন্ত্র ক্রম রাখি, তবে প্রতিটি সারিতে একটি global_average কলাম রয়েছে যার সকল অর্ডারের গড়। খুব দরকারী, উদাহরণস্বরূপ, একটি অর্ডার গড় থেকে কতটা বিচ্যুত হয় তা পরিমাপ করতে!

ব্যায়াম#sql.m13.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

'পণ্য' টেবিল থেকে 'মূল্য' কলামটি নির্বাচন করুন। 'global_max_price' নামক একটি কলাম যোগ করুন যাতে সমগ্র টেবিলে একটি উইন্ডো ফাংশন দিয়ে গণনা করা সর্বোচ্চ মূল্য থাকে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

OVER() এর সাথে মিলিত MAX(মূল্য) ব্যবহার করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#sql.m13.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

'আইডি', 'মূল্য' বের করুন এবং 'পণ্য' টেবিল থেকে সামগ্রিক গড় মূল্য ('গ্লোবাল_এভিজি') যোগ করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

শুধু AVG(মূল্য) ওভার() যোগ করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ