PDA

View Full Version : سوال: بدست آوردن انحراف معيار



hn3776
پنج شنبه 15 اردیبهشت 1390, 15:25 عصر
با سلام خدمت دوستان و اساتيد عزيز
بنده با استفاده از كوئري و تابع stdev امكان محاسبه انحراف معيار در يك فيلد خاص در ركوردهاي يك جدول را دارم اما متاسفانه نمي توانم انحراف معيار فيلدهاي يك ركورد را بدست آورم.
به عنوان مثال در يك جدول فيدهاي هر ركورد متشكل از 1- نمره درس رياضي 2-نمره درس علوم و3- نمره درس زبان است.
جهت محاسبه انحراف معيار نمرات درس رياضي مشكلي وجود ندارم اما نمي توانم انحراف معيار نمرات دروس مختلف يك دانش آموز خاص را محاسبه كنم ( با استفاده از كوئري ) .
لطفا در اين زمينه بنده را راهنمائي كنيد.
با تشكر

hn3776
سه شنبه 27 اردیبهشت 1390, 09:53 صبح
اساتيد عزيز كسي نبود من رو راهنمائي كنه ؟

bita_ziba77
سه شنبه 27 اردیبهشت 1390, 10:32 صبح
با سلام
1) ابتدا كد زير را در يك ماژول كپي نماييد:


Public Function RStDev(ParamArray FieldValues()) As Variant

'---------------------------------------------------------

' Function RStDev() calculates the Standard Deviation of

' sample data passed as arguments. NOTE: The standard deviation

' of sample data is only valid if more than one argument is

' numeric.

'---------------------------------------------------------

Dim dblSum As Double, dblSumOfSq As Double

Dim n As Long, varArg As Variant

For Each varArg In FieldValues

If IsNumeric(varArg) Then

dblSum = dblSum + varArg

dblSumOfSq = dblSumOfSq + varArg * varArg

n = n + 1

End If

Next



If n > 1 Then ' Variance/StDev applies if more than a single point

RStDev = Sqr((n * dblSumOfSq - dblSum * dblSum) / (n * (n - 1)))

Else

RStDev = Null

End If

End Function


2)سپس يك جدول بسازيد در اينجا به صورت پيش فرض نام جدول tblStandardDeviation آمده است.
3)جدول شما بايد داراي يك كليد اصلي با نام Id و همچنين فيلدهاي مورد نيازتان با فرمت number و field size به صورت Double باشد مثلا
[ID] Field (Primary Key){AutoNumber]
[Field1]و[Field1]و[Field3] مثلا [رياضي] [زبان] [علوم]
4)حالا يك كوئري ساخته و فيلدهاي حود را در آن قرار دهيد . مشابه كد sql زير:


SELECT Val(RStDev([Field1],[Field2],[Field3]) AS Std_Deviation

FROM tblStandardDeviation;


حالا كار به اتمام رسيده است.

با تشكر

hn3776
شنبه 14 خرداد 1390, 14:09 عصر
ضمن تشكر از شما
من اين كار رو انجام دادم
اما مشكلي كه پيش اومده اينه كه تعداد فيلدهاي ركورد من 52 عدد هستش اما پس از ساخت كوئري و اعمال دستور فوق كه راهنمائي كرده بوديد SELECT Val(RStDev([Field1],[Field2],[Field3]) AS Std_Deviation، به علت تعداد زياد فيلادها sql پيغام خطا مي ده تا وقتيكه تعداد فيلدها رو به 30 عدد برسونم
لطفا در اين زمينه من رو راهنمائي كنيد.
با تشكر فراوان