Wie berechne ich Prozentsätze mit Dezimalstellen in SQL?
Frage
Wie konvertiere ich diese in eine Dezimalzahl, die in SQL?Unten ist die Gleichung, und ich die Antwort bekommen, 78 (integer), aber die wirkliche Antwort ist 78.6 (mit einer Dezimalstelle), so brauche ich, um dies zu zeigen, da sonst die Bericht wird nicht tally up to 100%
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Lösung
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
Hässlich, aber es funktioniert.
Andere Tipps
Versuchen Sie folgendes:
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Mindestens in MySQL (wenn es hilft), wenn Sie Float-Zahlen verwenden möchten, Sie hatten einen Typ float Feld zu verwenden, nicht die regulären int Felder aus.
Fügen Sie einfach eine Dezimalzahl in der 100
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Dies zwingt die gesamte Verarbeitung in Schwimmern passieren ... wenn Sie die endgültige Ausgabe als Text mögen, und abgeschnittene für die Anzeige nur eine Dezimalstelle, verwendet Str Funktion
Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage
Nicht hässlich und Arbeit besser und schneller, genießen Sie es!
Es ist wahrscheinlich übertrieben, dies zu tun, aber Sie können alle Werte betrachten wollen Gießen schwimmt Genauigkeit in allen Phasen zu gewährleisten.
(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent
Beachten Sie, die Sie wirklich brauchen Code für den Fall hier zu setzen, die TotalVisits == 0, oder Sie werden eine Division durch 0 Antwort.
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'
Dies wird eine Dezimalzahl zurückzukehren und die Runde wird es auf eine Stelle abzurunden. Also in Ihrem Fall würden Sie 76,6 erhalten. Wenn Sie nicht möchten, dass alle Ziffern stellen die 1 auf 0 geändert werden, und wenn Sie zwei Ziffern wollen es 2. ändern
Versuchen Sie es mit diesem, nicht rund und str oder Over (). Ich fand diese als einfacher Weg, es zu tun.
cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3)) as [Visit1percent]
Sie können die Anzahl der Dezimalstellen ändern, wie Sie wünschen
z. numeric (5,2) oder numerisch (5,4)
Dies könnte nicht auf Sie direkt, aber wenn Sie Runde einen Satz von zahlen für die Anzeige Sie sind nie garantiert, um erhalten Sie zahlen, die zu 100 sofern Sie Besondere Vorsichtsmaßnahmen ergreifen.Für Beispiel, Rundung 33.33333, 33.33333 und 33.33333 ist, lassen Sie einmal kurz auf die Summe, also die logische Sache zu tun ist, ändern Sie den Prozentwert für den größten Wert in der Menge zu berücksichtigen Unterschied.
Hier ist ein Weg, das zu tun, in Oracle-SQL analytische Funktionen und eine subquery factoring (MIT) - Klausel zum generieren von Beispiel-Daten.
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 können Sie die SQL-Funktion ROUND nutzen (Anzahl, Anzahl der Nachkommastellen), rundet es die Zahl auf die angegebene Anzahl von Dezimalstellen:
ROUND ((100 * [TotalVisit1] / [TotalVisits]), 1) AS Visit1percent