AVG в ОГРОМНОЙ базе

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
gert
Сообщения: 18
Зарегистрирован: 19 фев 2012, 16:46

AVG в ОГРОМНОЙ базе

Сообщение gert » 14 июн 2012, 17:30

Некоторое время назад просил помощи с построением индексов в огромной базе (400 Гб и более 3 500 000 000 записей).

Моя работа активно продолжается, но сейчас наткнулся на такой момент: считаю AVG практически для всего объема этих записей и получаю отрицательное значение, когда каждое значение положительное (проверено запросом)! Значения типа NUMERIC(3,2)
Полагаю, что происходит переполнение чего либо... Подскажите есть ли какие ограничения для функции AVG и как их обойти?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: AVG в ОГРОМНОЙ базе

Сообщение hvlad » 14 июн 2012, 18:53

AVG(CAST(xx AS NUMERIC 18.2))

PS IIRC, по стандарту должно быть numeric overflow, а не тихое переполнение...

gert
Сообщения: 18
Зарегистрирован: 19 фев 2012, 16:46

Re: AVG в ОГРОМНОЙ базе

Сообщение gert » 15 июн 2012, 16:02

Спасибо большое, запустил, жду!
Конечно странно что не ругнулся, да и вообще, непонятно почему необходимо расширить размерность исходного типа...

gert
Сообщения: 18
Зарегистрирован: 19 фев 2012, 16:46

Re: AVG в ОГРОМНОЙ базе

Сообщение gert » 16 июн 2012, 13:31

:(
Запрос:
select avg(cast(prox.prox_val as Numeric(18,2)))
from proximity prox
where prox.prox_val<>1

результат тот же -0,55
P.S. версия СУБД Firebird 2.5

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: AVG в ОГРОМНОЙ базе

Сообщение hvlad » 16 июн 2012, 20:05

А где гарантия, то там всё неотрицательное ? Вычисли ещё MIN и MAX

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: AVG в ОГРОМНОЙ базе

Сообщение dimitr » 16 июн 2012, 23:38

там знаковый int переполняется при подсчете кол-ва записей, на которое потом делится сумма

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: AVG в ОГРОМНОЙ базе

Сообщение hvlad » 17 июн 2012, 00:42

Где же ты раньше был ? :)

gert
Сообщения: 18
Зарегистрирован: 19 фев 2012, 16:46

Re: AVG в ОГРОМНОЙ базе

Сообщение gert » 17 июн 2012, 17:33

dimitr писал(а):там знаковый int переполняется при подсчете кол-ва записей, на которое потом делится сумма
gert писал(а):Полагаю, что происходит переполнение чего либо...
Так и думал... integer вроде до 2 147 483 648, попробую разбить на две выборки ...

Ответить