AVG в ОГРОМНОЙ базе
AVG в ОГРОМНОЙ базе
Некоторое время назад просил помощи с построением индексов в огромной базе (400 Гб и более 3 500 000 000 записей).
Моя работа активно продолжается, но сейчас наткнулся на такой момент: считаю AVG практически для всего объема этих записей и получаю отрицательное значение, когда каждое значение положительное (проверено запросом)! Значения типа NUMERIC(3,2)
Полагаю, что происходит переполнение чего либо... Подскажите есть ли какие ограничения для функции AVG и как их обойти?
Моя работа активно продолжается, но сейчас наткнулся на такой момент: считаю AVG практически для всего объема этих записей и получаю отрицательное значение, когда каждое значение положительное (проверено запросом)! Значения типа NUMERIC(3,2)
Полагаю, что происходит переполнение чего либо... Подскажите есть ли какие ограничения для функции AVG и как их обойти?
Re: AVG в ОГРОМНОЙ базе
AVG(CAST(xx AS NUMERIC 18.2))
PS IIRC, по стандарту должно быть numeric overflow, а не тихое переполнение...
PS IIRC, по стандарту должно быть numeric overflow, а не тихое переполнение...
Re: AVG в ОГРОМНОЙ базе
Спасибо большое, запустил, жду!
Конечно странно что не ругнулся, да и вообще, непонятно почему необходимо расширить размерность исходного типа...
Конечно странно что не ругнулся, да и вообще, непонятно почему необходимо расширить размерность исходного типа...
Re: AVG в ОГРОМНОЙ базе
![Sad :(](./images/smilies/icon_sad.gif)
Запрос:
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
Re: AVG в ОГРОМНОЙ базе
А где гарантия, то там всё неотрицательное ? Вычисли ещё MIN и MAX
Re: AVG в ОГРОМНОЙ базе
там знаковый int переполняется при подсчете кол-ва записей, на которое потом делится сумма
Re: AVG в ОГРОМНОЙ базе
Где же ты раньше был ? ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
Re: AVG в ОГРОМНОЙ базе
dimitr писал(а):там знаковый int переполняется при подсчете кол-ва записей, на которое потом делится сумма
Так и думал... integer вроде до 2 147 483 648, попробую разбить на две выборки ...gert писал(а):Полагаю, что происходит переполнение чего либо...