Come calcolo le percentuali con i decimali in SQL?
Domanda
Come posso convertirlo in un decimale in SQL? Di seguito è riportata l'equazione e ottengo la risposta come 78 (numero intero) ma la risposta reale è 78,6 (con un decimale), quindi devo mostrarlo poiché altrimenti il ??rapporto non raggiungerà il 100%
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Soluzione
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
Brutto, ma funziona.
Altri suggerimenti
Prova questo:
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Almeno in MySQL (se aiuta), se vuoi usare numeri float devi usare un campo float di tipo, non i normali campi int.
Basta aggiungere un decimale al 100
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
questo impone che tutta l'elaborazione avvenga in float ... se vuoi l'output finale come testo e troncato per la visualizzazione con un solo decimale, usa la funzione Str
Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage
Non brutto e funziona meglio e velocemente, divertiti!
Probabilmente è eccessivo farlo, ma potresti voler considerare di lanciare tutti i valori su float per garantire l'accuratezza in tutte le fasi.
(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent
Nota, devi davvero inserire il codice qui nel caso in cui TotalVisits == 0 o otterrai una divisione per 0 risposte.
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'
Questo restituirà un decimale e il ROUND lo arrotonderà a una cifra. Quindi nel tuo caso otterrai 76.6. Se non si desidera alcuna cifra, modificare 1 su 0 e se si desidera due cifre, modificarlo in 2.
Prova con questo, senza round e str o Over (). ho trovato questo come un modo più semplice per farlo.
cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3)) as [Visit1percent]
Puoi modificare il numero di punti decimali come desideri
es. numerico (5,2) o numerico (5,4)
Potrebbe non essere possibile risolvere direttamente il problema, ma quando si arrotonda una serie di numeri per la visualizzazione, non si è mai sicuri di ottenere numeri che aggiungono a 100 a meno che non si prendano precauzioni speciali. Ad esempio, l'arrotondamento di 33.33333, 33.33333 e 33.33333 ti lascerà uno short sulla somma, quindi la cosa logica da fare è modificare la percentuale per il valore più grande nell'insieme per tener conto di qualsiasi differenza.
Ecco un modo per farlo in Oracle SQL usando funzioni analitiche e una clausola factoring subquery (WITH) per generare dati di esempio.
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
In ms Access Puoi usare la funzione SQL ROUND (numero, numero di decimali), arrotonderà il numero al numero di decimali dato:
ROUND ((100 * [TotalVisit1] / [TotalVisits]), 1) AS Visit1percent