T-SQL-Durchschnitt, gerundet auf die nächste Ganzzahl
Ich bin mir nicht sicher, ob dies wurde gebeten vor, aber wie bekomme ich den Durchschnitt, gerundet auf den nächsten ganzzahligen Wert in T-SQL?
Dank
Boden wird immer abgerundet.
danke für den Hinweis. Ich wollte nicht sehen, dass er will, das am nächsten integer, ich dachte, es sollte abgerundet werden. Ich werde Sie löschen meinen Kommentar.
danke für den Hinweis. Ich wollte nicht sehen, dass er will, das am nächsten integer, ich dachte, es sollte abgerundet werden. Ich werde Sie löschen meinen Kommentar.
InformationsquelleAutor user441365 | 2011-08-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies sollte es tun. Möglicherweise benötigen Sie eine GRUPPE, INDEM Sie auf das Ende je nachdem, was Sie suchen für den Durchschnitt.
EDIT: Diese Frage ist interessanter als ich zuerst dachte.
Wenn wir eine dummy-Tabelle, wie so...
Erhalten wir einen integer-Durchschnitt von 4
Aber wenn wir dies tun,
Bekommen wir einen dezimal-Durchschnitt von 4.666..etc
So sieht es aus wie der Weg zu gehen ist
Wird wieder ein integer-Wert von 5 das ist das, was Sie suchen.
Haben Sie zu ersetzen, sowohl Spaltenname und Tabellenname mit dem wirklichen Namen?
+1 - Auch gesichtet, die auf den Daten Eingabe-Ausgabe.
Dank Jon. Ich muss zugeben, ein wenig überrascht von diesem Ergebnis. Es macht Sinn, aber es ist nicht das, was ich erwartet hatte.
InformationsquelleAutor David Steele
Wenn Sie in SQL Server verwenden, verwenden Sie einfach
round(avg(column * 1.0), 0)
.Den Grund für
* 1.0
ist, da sql server in einigen Fällen gibt Berechnungen, die mit den gleichen Datentyp der Werte in der Berechnung verwendet. Also, wenn Sie berechnen den Durchschnitt von 3, 4 und 4, das Ergebnis ist auf 3,66..., aber der Datentyp des Ergebnisses ist integer, daher die sql-server abgeschnitten wird 3.66... 3, mit* 1.0
implizit konvertiert die Eingabe in eine Dezimalzahl.Alternativ können Sie konvertieren oder wandeln Sie die Werte, bevor die Durchschnittliche Berechnung, wie
cast(column as decimal)
anstatt die* 1.0
trick.Wenn Ihre Spalten-es ist nicht eine integer Spalte, die Sie entfernen können die
* 1.0
.PS: das Ergebnis
round(avg(column * 1.0), 0)
noch ist eine Dezimalzahl, können Sie explizite convert-it mitconvert(int, round(avg(column * 1.0), 0), 0)
oder was auch immer Sprache, die Sie verwenden, die Arbeit zu tun (es ist eine implizite Konvertierung)InformationsquelleAutor user1330271
InformationsquelleAutor tim franklin
diese haben es geschafft:
CONVERT(int,ROUND(AVG(CAST(SPALTE-NAME ALS DEZIMALZAHL)) ,0))
gibt es nicht einen kürzeren Weg, es zu tun, obwohl?
Datentyp ist integer - name ist Bewertung
Siehe Ergebnisse unter. Es sieht aus wie Ihre innersten cast zu dezimal macht den Unterschied. Sie können CAST-oder CONVERT-würde ich nicht mischen, die Ihnen aber nur für Sauberkeit.
InformationsquelleAutor user441365
Wenn Sie nicht wie die Verknüpfungen, die Sie verwenden könnten, der lange Weg:
InformationsquelleAutor t-clausen.dk
Sind die folgenden Anweisungen äquivalent:
InformationsquelleAutor Gerardo Lima
Auf SQL 2014,
InformationsquelleAutor Rambox