Como faço para calcular percentagens com casas decimais no SQL?
Pergunta
Como posso converter isso em um decimal no SQL? Abaixo é a equação e eu recebo a resposta de 78 (inteiro), mas a resposta real é 78,6 (com um decimal) assim que eu preciso para mostrar isso, caso contrário o relatório não vai contagem até 100%
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Solução
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
feio, mas funciona.
Outras dicas
Tente isto:
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Pelo menos no MySQL (se isso ajuda), se você quiser usar números flutuador você tinha que usar um campo de tipo float, não os campos int regular.
Basta adicionar um decimal para o 100
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Este forças todo o processamento para acontecer em jangadas ... se quiser que o resultado final como texto, e truncado para a exibição de apenas uma casa decimal, use a função Str
Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage
Não feio e trabalhar melhor e rápido, divirta-se!
É provavelmente um exagero para fazer isso, mas você pode querer considerar lançar todos os valores para carros alegóricos para garantir a precisão em todas as fases.
(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent
Note, você realmente precisa colocar o código aqui para o caso de que TotalVisits == 0 ou você terá uma divisão por 0 resposta.
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'
Isso irá retornar um decimal ea rodada vai arredondar para um dígito. Assim, no seu caso, você poderia obter 76,6. Se você não quer quaisquer dígitos mudar o 1 a 0 e se você quiser dois dígitos alterá-lo para 2.
Tente com isso, não redondo e str ou Over (). eu encontrei este como uma maneira mais simples de fazê-lo.
cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3)) as [Visit1percent]
Você pode alterar o número de casas decimais como você deseja
por exemplo. numérico (5,2) ou numérica (5,4)
Isto pode não tratar você emitir diretamente, mas quando você volta um conjunto de números para exibição que você nunca está garantido para obter números que adicionam a 100 a menos que você tomar precauções especiais. Por exemplo, o arredondamento 33.33333, 33.33333 e 33.33333 vai deixá-lo um curto na soma, assim que a coisa lógica a fazer é modificar o percentual para o maior valor no conjunto a ter em conta qualquer diferença.
Aqui está uma maneira de fazer isso no Oracle SQL usando funções analíticas e uma factoring subconsulta (COM) Cláusula para gerar dados amostra.
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
Em MS Access Você pode usar o ROUND função SQL (número, número de casas decimais), ele irá arredondar o número para o número dado de decimais: