Подтвердить что ты не робот

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

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

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

Ответ 1

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

Уродливый, но он работает.

Ответ 2

Попробуйте следующее:

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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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


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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

Попробуйте с этим, no round и str или Over(). Я нашел это как более простой способ сделать это.

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

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

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

Ответ 9

Это может не касаться вашей проблемы напрямую, но когда вы обходите набор номеров для отображения, вам никогда не гарантируется получение номеров, которые добавляются до 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                     

Ответ 10

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

ROUND ((100 * [TotalVisit1]/[TotalVisits]), 1) AS Visit1percent