:: Visual Foxpro, Foxpro for DOS
Функция STD()
OlegA

Сообщений: 533
Откуда: Иркутск
Дата регистрации: 22.06.2001
Возможно ли как-то встроить функцию STD() в SQL запрос?
Чтобы функция считала в зависимости от условия group by.
Пытаюсь создать свою функцию в которой считается STD(), но не получается передать условия группировки в оператор FOR для CALCULATE
Ratings: 0 negative/0 positive
Re: Функция STD()
Alsim

Сообщений: 3636
Откуда: Екатеринбург
Дата регистрации: 17.11.2004
sum(iif(условие = …,std(...),00000.00)) as ...
Ratings: 0 negative/0 positive
Re: Функция STD()
OlegA

Сообщений: 533
Откуда: Иркутск
Дата регистрации: 22.06.2001
Видать жара влияет, не могу понять как это применить в моем случае
Ratings: 0 negative/0 positive
Re: Функция STD()
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Наверное телепаты все на отдыхе сегодня)))
Потому как , мне кажется, нет такой функции.
Хотя упоминание STD() в описании CALCULATE, это и обозвано функцией)

Но... прочитав хелп, и вставив свое понимание в ваш вопрос, понимание окончательно пропало)
Кроме, что, стало ясно, что запрос нативный.
Очевидно, надо создать функцию, в которой будет CALCULATE.
OlegA
но не получается передать условия группировки в оператор FOR для CALCULATE
И тут уже полный аут))))
Телепаты, ау)))

Так чего хочется то?


------------------
Ratings: 0 negative/0 positive
Re: Функция STD()
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
CREATE CURSOR Test (GroupId i, SomeValue i)
FOR ln1 = 0 TO 2
FOR ln2 = 1 TO 6
INSERT INTO Test (GroupId, SomeValue) VALUES (m.ln1, m.ln2*10^m.ln1)
ENDFOR
ENDFOR
SELECT SQRT(SUM((t1.SomeValue - s1.AvgValue)^2)/COUNT(t1.SomeValue)) STD, t1.GroupId ;
FROM Test t1 ;
INNER JOIN ;
(SELECT CAST(AVG(SomeValue) AS DOUBLE) AvgValue, GroupId FROM Test GROUP BY GroupId) s1 ;
ON s1.GroupId = t1.GroupId ;
GROUP BY t1.GroupId ;
INTO CURSOR Result
BROWSE

Фокс в CALCULATE STD считает "Стандартное отклонение на основании смещённой оценки дисперсии". Если нужно на основании "несмещённой оценки", то делить на COUNT(t1.SomeValue)-1 (позаботившись об отсутствии там нуля Для групп из 1 элемента "Стандартное отклонение" =0 безо всяких расчётов). Ну и по поводу null я особо не парился - будут проблемы если в группе одни null-ы.

Вообще я удивлён - если уж тебе понадобилось стандартное отклонение, то ты по любому должен знать что это такое, и как его считать - банально "на бумажке", откуда уже переложить на фокс не должно составлять труда


------------------
WBR, Igor
Ratings: 0 negative/2 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 45 akvvohinc  (Гостей: 44)

© 2000-2024 Fox Club 
Яндекс.Метрика