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

PARTITION BY এর সাথে গ্রুপিং

PARTITION BY এর সাথে গ্রুপিং

প্রতিটি সারিতে বিশ্বব্যাপী গণনা করা সহজ, কিন্তু প্রায়শই এটি যথেষ্ট নয়। প্রতিটি সারিতে মূল বিবরণ রেখে আমরা গড় প্রতি বিভাগ বা প্রতি গ্রাহক গণনা করতে চাই।

এখানেই PARTITION BY এর ভিতরে OVER(...) ধারাটি আসে৷

কিভাবে PARTITION BY কাজ করে

ধারণাগতভাবে এটি GROUP BY এর মতোই আচরণ করে, কিন্তু ফলাফলে সারি ভেঙে ফেলার পরিবর্তে, এটি শুধুমাত্র ডেটার "উইন্ডো" এর সীমানা নির্ধারণ করে যার উপর ফাংশনটি একক সারির ফলাফল গণনা করতে কাজ করবে।

SQL
SELECT
  product_name,
  category_id,
  price,
  AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;

প্রতিটি পণ্য সারি তার নিজস্ব বিবরণ রাখে, এবং cat_avg_price কলামটি তার একই বিভাগে থাকা পণ্যগুলির গড় _সীমাবদ্ধ দেখাবে।

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

'পণ্য' টেবিল থেকে, 'id', 'category_id' এবং 'price' বের করুন। উইন্ডো ফাংশন ব্যবহার করে প্রতিটি 'category_id'-এর জন্য 'মূল্য'-এর যোগফল গণনা করে একটি 'শ্রেণী_মোট' কলাম যোগ করুন।

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

SUM(মূল্য) OVER(partiTION by category_id) ব্যবহার করুন।

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

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

'রিভিউ' টেবিল থেকে, 'product_id', 'রেটিং' এবং 'avg_product_rating' (পণ্য দ্বারা বিভক্ত গড় রেটিং) দেখান। সমস্ত সারি দেখান।

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

AVG(রেটিং) এবং PARTITION BY product_id ব্যবহার করুন। প্রয়োজন হলে NUMERIC-এ কাস্ট করুন।

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