Агрегатная функция AVG и SUM изменяет мой столбец размера типа данных в SybaseIQ

Я получаю сообщение об ошибке в Sybase Iq, потому что функция агрегации (AVG и SUM) изменяет размер моего столбца, и когда я вставляю значения столбца функции агрегации в столбец назначения, результаты настолько велики для столбца назначения .

пример:

            Salary
          -----------    
            0,4565
            0,4555
            0,4399
             ..
             ..

В моей процедуре мне нужно написать

        SUM(salary)/AVG(salary)

когда я пишу это

       select  SUM(salary)/AVG(salary) as AVG_Salary
          from mytable
             group by salary

Я получил это как результат

                AVG_Salary
             ----------------
            0,425000000000000000000000000  
            0,455000000000000000000000000
            0,442132124300000000000000000
            1,545646464743879540386969949
              ... 
              ...

Это почему? и если попытаться его округлить, тоже не сработает,

что я могу делать?

Спасибо за ваши ответы.

В качестве предложения я пытаюсь сделать

   cast(AVG_Salary) as decimal (12,9)  --the size of my destination column

это тоже не работает. Я получаю сообщение об ошибке «Преобразование типа данных невозможно»


person Enrique Benito Casado    schedule 14.11.2017    source источник


Ответы (2)


поскольку стандартный SybaseIQ с функцией агрегирования показывает полный результат, но десятичное число не должно быть проблемой в вашей целевой таблице. если вы попробовали конвертер

    cast(AVG_Salary) as decimal (12,9)  

и у вас возникла проблема «Преобразование типа данных невозможно» просто потому, что ваши данные слишком велики.

Я имею в виду, что это возможно:

            AVG_Salary           cast(AVG_Salary) as decimal (12,9)     
        ------------------      ------------------------------------    
          1,6655040959559          1,665504095    --ok                  
          12,666664554543          12,666664554   --ok
          1123,8190832083          --Error  

проблема возникает из-за вашей функции агрегирования SUM, вероятно, она делает результат настолько большим, и в этом случае "Cast" не работает, потому что приведение уменьшает (округляет) десятичные дроби, но это не способ уменьшить ваше число. Вот почему вы получаете проблему «Преобразование типа данных». Это не проблема с десятичными числами. Проблема в том, что ваше число слишком велико.

person Community    schedule 15.11.2017

Если вам это не нужно, используйте cast (avg (...) as numeric (9,4))

person RobV    schedule 14.11.2017