Frage zu Anzeigeformat eines Rechenergebnisses
Verfasst: Di 2. Jun 2020, 11:04
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?
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?