Как рассчитать проценты с десятичными знаками в SQL?

Как я могу преобразовать это в decimal в SQL? Ниже приведено уравнение, и я получаю ответ как 78 (целое число), но реальный ответ-78.6 (с десятичным числом), поэтому мне нужно показать это, так как в противном случае отчет не будет подсчитываться до 100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

10 ответов


convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent

некрасиво, но это работает.


Попробуйте Это:

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

по крайней мере, в MySQL (если это помогает), если вы хотите использовать числа float, вы должны были использовать поле типа float, а не обычные поля int.


просто добавьте десятичное число к 100

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

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

Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent

CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage


Не уродливый и работать лучше и быстро, наслаждайтесь!


вероятно, это излишне, но вы можете рассмотреть возможность приведения всех значений к поплавкам, чтобы обеспечить точность на всех этапах.

(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent

обратите внимание,вам действительно нужно поместить код здесь для случая, когда TotalVisits == 0 или вы получите деление на 0.


SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'

это вернет десятичное число, и раунд будет округлять его до одной цифры. Так что в вашем случае вы получите 76.6. Если вы не хотите никаких цифр, измените 1 на 0, а если вы хотите, чтобы две цифры изменили его на 2.


попробуйте с этим, без раунда и str или Over (). я нашел это более простым способом.

cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3))  as [Visit1percent]

вы можете изменить количество десятичных знаков, как вы хотите

например, числовой(5,2) или числовой(5,4)


Это может не решить проблему напрямую, но когда вы округляете набор номеров для отображения, вы никогда не получите номера, которые добавляют к 100, если вы не примете специальных мер предосторожности. Например, округление 33.33333, 33.33333 и 33.33333 оставит вам один недостаток в сумме, поэтому логично изменить процент для наибольшего значения в наборе, чтобы учесть любую разницу.

вот способ сделать это в Oracle SQL с помощью аналитических функций и предложение подзапроса факторинга (WITH) для генерации выборочных данных.

with data as (select 25 num from dual union all
              select 25     from dual union all
              select 25     from dual)
select num, 
case
   when rnk = 1
   then 100 - sum(pct) over (order by rnk desc
                             rows between unbounded preceding
                                      and         1 preceding)
   else pct
end pct
from
   (
   select num,
          round(100*ratio_to_report(num) over ()) pct,
          row_number() over (order by num desc) rnk
   from data
   )
/


NUM                    PCT                    
---------------------- ---------------------- 
25                     33                    
25                     33                     
25                     34                     

в ms Access вы можете использовать функцию SQL ROUND (число, количество десятичных знаков), она будет округлять число до заданного количества десятичных знаков:

круглый ((100 *[TotalVisit1] / [TotalVisits]), 1) Как Visit1percent