Seite 1 von 1

Frage zu Anzeigeformat eines Rechenergebnisses

Verfasst: Di 2. Jun 2020, 11:04
von SdKfz171
Hallo zusammen,

Foilgendes spielkt sich in einer als SQL definierten Ansicht ab, die auf mehrere auch als SQL definierten Ansichten beruht.

ich habe 2 Spalten, die zuerst einmal Integer sind.
Eine ist ein COUNT(*) Ergebnis und die andere ist eine Summe aus den Werten in einer Integer-Spalte einer Tabelle, zu der der COUNT(*) gehört (in der Abfrage, auf die die andere Abfrage zugreift).
Eigentlich möchte ich den durchschnittlichen Inhalt der summierten Spalte wissen. Da es sich um Integer handelt liefert AVG() natürlich auch einen Integer und zwar 1 (bei einem tatsächlichen Wert von 100505 / 68698 also etwa 1,60226).
Also berechne ich es halt selber,
Erster Versuch ohne CAST liefert auch wieder 1. (Klar, Ergebnis auch als Integer interpretiert)
Soweit ist eigentlich alles wie (nach lesen der Doku) zu erwarten ist.
Also berechne ich CAST (Spaltensumme AS DOUBLE PRECISION) / CAST(count(*) Wert AS DOUBLE PRECISION).
Angezeigt wird jetzt 1,6, was grundsätzlich schon mal ganz gut passt und ich kann damit auch leben.
Für mein Verständnis wäre es allerdings gut zu wissen, worauf das Abschneiden der weiteren Kommastellen beruht.
Auch ein weiterer CAST um das Ergebnis ändert hier nichts. Genausowenig wie ein ROUND(Ergebnis, 3).
Ich habe ein wenig in der Doku zu diesem Thema gesucht, aber nichts gefunden.

Basisview (StatHelperSongGesamt):
SELECT 1 "StatId", COUNT( * ) "anzahl", SUM( "Song"."Laenge" ) "Laenge Sec", CAST( SUM( "Song"."Laenge" ) / 60 AS INTEGER ) || ' : ' || CAST( SUM( "Song"."Laenge" ) - ( FLOOR( SUM( "Song"."Laenge" ) / 60 ) ) * 60 AS INTEGER ) "Laenge min", CAST( SUM( "Song"."Laenge" ) / 3600 AS INTEGER ) || ' : ' || CAST( ( SUM( "Song"."Laenge" ) - ( FLOOR( SUM( "Song"."Laenge" ) / 3600 ) ) * 3600 ) / 60 AS INTEGER ) || ' : ' || CAST( SUM( "Song"."Laenge" ) - ( FLOOR( SUM( "Song"."Laenge" ) / 60 ) ) * 60 AS INTEGER ) "Laenge h", CAST( SUM( "Song"."Laenge" ) / 86400 AS INTEGER ) || ' : ' || CAST( ( SUM( "Song"."Laenge" ) - ( FLOOR( SUM( "Song"."Laenge" ) / 86400 ) ) * 86400 ) / 3600 AS INTEGER ) || ' : ' || CAST( ( SUM( "Song"."Laenge" ) - ( FLOOR( SUM( "Song"."Laenge" ) / 3600 ) ) * 3600 ) / 60 AS INTEGER ) || ' : ' || CAST( SUM( "Song"."Laenge" ) - ( FLOOR( SUM( "Song"."Laenge" ) / 60 ) ) * 60 AS INTEGER ) "Laenge d", SUM( "Song"."Einstufung" ) "Einstufung summiert" FROM "Song" WHERE LOWER ( COALESCE ( "Song"."Kommentar", '' ) ) != 'doppelt' AND "Song"."Sound" < 4

View mit Berechnung:
SELECT "Ges"."anzahl" "gesamt Anzahl Songs", "Ges"."Laenge d" "Länge in Tagen", ROUND( CAST( "Ges"."Einstufung summiert" AS DOUBLE PRECISION ) / CAST( "Ges"."anzahl" AS DOUBLE PRECISION ), 3 ) "durchschnittliche Einstugung", "Gut"."anzahl" "Songs gut", "Gut"."Laenge d" "Gut Länge in Tagen", "Plus"."anzahl" "Songs GG+", "Plus"."Laenge d" "GG+ Länge in Tagen", "GG"."anzahl" "Songs GG", "Minus"."anzahl" "Songs GG-", "OK"."anzahl" "Songs OK", "No"."anzahl" "Songs No" FROM "StatHelperSongGesamt" AS "Ges" JOIN "StatHelperSongGut" AS "Gut" ON "Ges"."StatId" = "Gut"."StatId" JOIN "StatHelperSongPlus" AS "Plus" ON "Ges"."StatId" = "Plus"."StatId" JOIN "StatHelperSongGG" AS "GG" ON "Ges"."StatId" = "GG"."StatId" JOIN "StatHelperSongMinus" AS "Minus" ON "Ges"."StatId" = "Minus"."StatId" JOIN "StatHelperSongOK" AS "OK" ON "Ges"."StatId" = "OK"."StatId" JOIN "StatHelperSongNo" AS "No" ON "Ges"."StatId" = "No"."StatId"

Die anderen gejointen Views funktionieren, deswegen poste ich sie hier nicht.
Kann mich jemand in eine Richtung schubsen, wonach in in der Doku suchen soll oder weiß jemand vielleicht direkit, wo mein Problem herrührt?

Re: Frage zu Anzeigeformat eines Rechenergebnisses

Verfasst: Di 2. Jun 2020, 15:06
von RobertG
Die einfachste Möglichkeit, ein Integer-Ergebnis von vornherein zu vermeiden, ist, in die Rechnung eine Multiplikation mit z.B. 1.000000000 einzubauen. Dann hat Dein Ergebnis garantiert 9 Nachkommastellen.

Wenn Du schon das Handbuch heruntergeladen hast, dann schau Dir dazu einmal das Addieren von Zeiten zu Zeitstempeln in dem Kapitel "Datenbank-Aufgaben" an.

Gruß

Robert

Re: Frage zu Anzeigeformat eines Rechenergebnisses

Verfasst: Di 2. Jun 2020, 16:22
von SdKfz171
OK, vielen Dank. Werde ich mir mal anschauen.
Eigentlich hatte ich gedacht durch den Cast das gleiche zu erreichen.

Re: Frage zu Anzeigeformat eines Rechenergebnisses

Verfasst: Di 2. Jun 2020, 16:30
von SdKfz171
Hmm.

SELECT "Ges"."anzahl" "gesamt Anzahl Songs", "Ges"."Laenge d" "Länge in Tagen", ( 1.0000 * "Ges"."Einstufung summiert" ) / ( 1.0000 * "Ges"."anzahl" ) "durchschnittliche Einstugung", "Gut"."anzahl" "Songs gut", "Gut"."Laenge d" "Gut Länge in Tagen", "Plus"."anzahl" "Songs GG+", "Plus"."Laenge d" "GG+ Länge in Tagen", "GG"."anzahl" "Songs GG", "Minus"."anzahl" "Songs GG-", "OK"."anzahl" "Songs OK", "No"."anzahl" "Songs No" FROM "StatHelperSongGesamt" AS "Ges" JOIN "StatHelperSongGut" AS "Gut" ON "Ges"."StatId" = "Gut"."StatId" JOIN "StatHelperSongPlus" AS "Plus" ON "Ges"."StatId" = "Plus"."StatId" JOIN "StatHelperSongGG" AS "GG" ON "Ges"."StatId" = "GG"."StatId" JOIN "StatHelperSongMinus" AS "Minus" ON "Ges"."StatId" = "Minus"."StatId" JOIN "StatHelperSongOK" AS "OK" ON "Ges"."StatId" = "OK"."StatId" JOIN "StatHelperSongNo" AS "No" ON "Ges"."StatId" = "No"."StatId"

Liefert genauso 1.6 statt 1.6203.

Ach ja, ich weiß gar nicht, wie die aktuellen Einstellungen sind. Ich bewege mich auf jeden Fall in Firebird.

Re: Frage zu Anzeigeformat eines Rechenergebnisses

Verfasst: Di 2. Jun 2020, 18:34
von RobertG
... und die Anzeige hast Du auch auf die entsprechende Nachkommastellenzahl eingestellt?

Ohne ein Beispiel wird das nicht zu klären sein. Vielleicht mailst Du mir einfach einmal die Datenbank, damit wir von den gleichen Voraussetzungen ausgehen können.