PDA

View Full Version : استفاده از AVG برای چند ستون در یک Select



m_u3fi
چهارشنبه 11 آبان 1390, 12:07 عصر
میخوام با استفاده از یک SELECT روی چند ستون جدولم میانگین بگیرم
یه چیزی شبیه به این (البته میدونم این درست نیست)




select AVG(a1),AVG(a2),AVG(a3)
from A
where Key = 1




با توجه به اینکه شرط ها برای AVG روی هر ستون متفاوته مثلا برای AVG روی a1 باید شرط a1>0 برقرار باشد و برای a2 شرط a2 >2


آیا دستوری برای این وجود داره؟

این دستور به کارم نمیاد

select

(select avg(a1) from table1 where a1<>0) as avg1,(select avg(a2) from table1 where a2<>0)



چون جدول مورد نظر بسیار بزرگه و این دستور هم درون یک حلقه است که زیاد تکرار میشه در واقع میخوام به ازای هر key فقط یک select اجرا بشه

محمد سلیم آبادی
پنج شنبه 12 آبان 1390, 14:50 عصر
میانگین در حقیقت جمع عناصر تقسیم بر تعدادشان است. با این فرمول راه حل چیزی شبیه به این می شود:

select sum(CASE when a1>0 then a1 else 0 end)
/sum(case when a1>0 then 1 else 0 end) as average_a1
FROM table_name;