Как рассчитать проценты с десятичными знаками в 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
некрасиво, но это работает.
по крайней мере, в 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