ماڈیول اسباق (2/4)
PARTITION BY کے ساتھ گروپ بندی
PARTITION BY کے ساتھ گروپ بندی
ہر قطار پر عالمی حسابات رکھنا آسان ہے، لیکن اکثر یہ کافی نہیں ہوتا ہے۔ ہم ہر قطار پر اصل تفصیل رکھتے ہوئے اوسط فی زمرہ یا فی گاہک کا حساب لگانا چاہتے ہیں۔
یہ وہ جگہ ہے جہاں PARTITION BY کے اندر OVER(...) شق آتی ہے۔
PARTITION BY کیسے کام کرتا ہے۔
تصوراتی طور پر یہ GROUP BY کی طرح برتاؤ کرتا ہے، لیکن نتیجہ میں قطاروں کو منہدم کرنے کے بجائے، یہ صرف ڈیٹا کی "ونڈو" کی حد کو متعین کرتا ہے جس پر فنکشن واحد قطار کے نتائج کی گنتی کے لیے کام کرے گا۔
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;ہر پروڈکٹ کی قطار اپنی تفصیلات رکھتی ہے، اور cat_avg_price کالم اس کے اسی زمرے میں موجود پروڈکٹس کے لیے اوسط _محدود دکھائے گا۔
'پروڈکٹس' ٹیبل سے، 'id'، 'category_id' اور 'قیمت' نکالیں۔ ونڈو فنکشنز کا استعمال کرتے ہوئے ہر 'کیٹگری_آئی ڈی' کے لیے 'قیمت' کے SUM کا حساب لگاتے ہوئے ایک 'زمرہ_کل' کالم شامل کریں۔
اشارہ دکھائیں۔
SUM(قیمت) OVER(PARTITION BY category_id) استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
'جائزہ' ٹیبل سے، 'product_id'، 'درجہ بندی' اور 'avg_product_rating' (پروڈکٹ کے لحاظ سے تقسیم کردہ اوسط درجہ بندی) دکھائیں۔ تمام قطاریں دکھائیں۔
اشارہ دکھائیں۔
AVG(درجہ بندی) اور PARTITION BY product_id استعمال کریں۔ اگر ضرورت ہو تو اسے NUMERIC پر کاسٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔