17 Stimmen

Wie berechne ich Prozentsätze mit Dezimalstellen in SQL?

Wie kann ich dies in SQL in eine Dezimalzahl umwandeln? Unten ist die Gleichung und ich erhalte die Antwort als 78 (ganze Zahl), aber die wirkliche Antwort ist 78,6 (mit einer Dezimalstelle), so dass ich dies anzeigen muss, da sonst der Bericht nicht bis zu 100 % zusammenzählen wird

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

1voto

Charles Bretana Punkte 137391

Fügen Sie einfach eine Dezimalstelle zu den 100 hinzu.

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

dies erzwingt die gesamte Verarbeitung in Fließkommazahlen... wenn Sie die endgültige Ausgabe als Text wünschen, der für die Anzeige auf eine Dezimalstelle abgeschnitten wird, verwenden Sie die Funktion Str

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

0 Stimmen

Wie Ihre Antwort schön und ordentlich aussieht :)

0 Stimmen

Ich danke Ihnen, mein Herr! ...gerne helfe ich

0voto

Kent Fredric Punkte 55042

Es ist wahrscheinlich übertrieben, dies zu tun, aber Sie können in Erwägung ziehen, alle Werte in Floats umzuwandeln, um die Genauigkeit in allen Phasen zu gewährleisten.

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

Beachten Sie, dass Sie hier wirklich Code für den Fall einfügen müssen, dass TotalVisits == 0 ist, sonst erhalten Sie eine durch 0 geteilte Antwort.

0voto

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

Dies ergibt eine Dezimalzahl, die mit ROUND auf eine Stelle gerundet wird. In Ihrem Fall würden Sie also 76,6 erhalten. Wenn Sie keine Ziffern wollen, ändern Sie die 1 in 0 und wenn Sie zwei Ziffern wollen, ändern Sie sie in 2.

0voto

Zameer Fouzan Punkte 637

Versuchen Sie es mit diesem, keine Runde und str oder Over(). Ich fand dies als eine einfachere Möglichkeit, es zu tun.

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

Sie können die Anzahl der Dezimalstellen nach Belieben ändern

z. B. numeric(5,2) oder numeric(5,4)

-1voto

David Aldridge Punkte 50293

Dies ist zwar nicht direkt auf Ihr Problem anwendbar, aber wenn Sie eine Reihe von Zahlen für die Anzeige runden, ist nie garantiert, dass Sie Zahlen erhalten, die sich zu 100 addieren, es sei denn, Sie treffen besondere Vorkehrungen. Wenn Sie z. B. 33,33333, 33,33333 und 33,33333 runden, fehlt Ihnen eine Zahl in der Summe. Daher ist es logisch, dass Sie den Prozentsatz für den größten Wert in der Gruppe ändern, um die Differenz zu berücksichtigen.

Hier ist eine Möglichkeit, dies in Oracle SQL zu tun, indem analytische Funktionen und eine Unterabfrage-Faktorisierungsklausel (WITH) verwendet werden, um Beispieldaten zu erzeugen.

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

0 Stimmen

Das ist im Allgemeinen eine schlechte Idee. Wenn sich die Zahlen aufgrund von Rundungen nicht zu 100 addieren, dann ist das eben so. Das Herumspielen mit den Zahlen führt nur zu weniger genauen Ergebnissen.

0 Stimmen

Es ist weder eine gute noch eine schlechte Idee, und Verallgemeinerungen haben nichts damit zu tun. Es ist nur eine Technik, um eine bestimmte hypothetische Anforderung zu erfüllen.

0 Stimmen

Das stimmt, aber es ist eine schlechte Voraussetzung. Sie führt zu falsch angezeigten Daten. Und sie beantwortet nicht die Frage, die oben gestellt wurde. Und es ist auch nicht die genaueste Lösung, um die Prozente zu 100 zu addieren, obwohl es vielleicht die einfachste ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X