GROUP lässt Zeilen weg?

GROUP lässt Zeilen weg?

am 14.12.2004 13:29:33 von Michael Haszprunar

Hallo NG,

Ich habe im Moment ein Problem. Ich habe eine Tabelle mit einer INT-Spalte
und eine DATE-Spalte.

Nun hätte ich gerne in einem bestimmten Monatsbereich den Durchschnittswert
der INT-Spalte. Das löse ich bereits mit TO_DAYS und AVG() und mache am
Schluss einen GROUP BY auf MONTH(datum).

ABER: Ist der Schnitt in einem Monat = 0 (also keine Datensätze, die der
WHERE Bedingung entsprechen), so gibt er mir nicht 0 aus, sondern lässt die
entsprechende Ergebniszeile einfach weg.

Meine Frage: Kann ich das irgendwie so schreiben, dass ich auch 0 Zeilen
bekomem oder mus ich das nachher per Script umständlich abfragen?


Vielleicht noch ein Beispiel (etwas vereinfacht):

SELECT MONTH( datum ) as 'monat', AVG(werte) as 'durchschnitt'
FROM results
WHERE
TO_DAYS( datum ) BETWEEN TO_DAYS( '2004-09-05' ) AND TO_DAYS( '2005-02-
12' ) AND
werte <> '-1'
GROUP BY monat


Das gibt mir z.B.:

+-------+--------+
| 10 | 34 |
+-------+--------+
| 11 | 65 |
+-------+--------+
| 12 | 23 |
+-------+--------+


Aber mir fehlen die Zeilen 09,01 und 02.


Merci für eure Hilfe, ich hoffe es gibt da eine Möglichkeit.

Thx,
Michael H:

--
GCS dx s+: a-- C++$ UL P+++(PHP) L+ E? W++ N++ o-- K- w O? M? V? PS PE Y+
PGP>+ t+ 5++(+++) X+(--) R+ tv+ b+++ Dl D+ G e+ h--(---) r++ y+
http://www.geekcode.com

Re: GROUP lässt Zeilen weg?

am 14.12.2004 14:53:07 von do.not.REMOVETHAT

Michael Haszprunar schrieb:

> GROUP BY auf MONTH(datum).
>
> ABER: Ist der Schnitt in einem Monat = 0 (also keine Datensätze, die der
> WHERE Bedingung entsprechen), so gibt er mir nicht 0 aus, sondern lässt die
> entsprechende Ergebniszeile einfach weg.

Das ist richtig. Wenn es zu einem Monat keine Angaben gibt, dann gibt er
auch nichts aus. 0 wäre falsch, denn das würde bedeutet, dass der
Durchschnittswert 0 ist. "Kein Wert da" und "Der Durchschnitt der Werte
ist 0" sind 2 verschiedene Sachen.

> Meine Frage: Kann ich das irgendwie so schreiben, dass ich auch 0 Zeilen
> bekomem oder mus ich das nachher per Script umständlich abfragen?

Du musst irgendwo den Monat herbekommen. Ohne dass der Monat irgendwo
steht (z.B. extra Tabelle, die Du dazujoinen kannst oder auch im
PHP-Script) wird das nicht gelingen.

> Das gibt mir z.B.:
>
> +-------+--------+
> | 10 | 34 |
> +-------+--------+
> | 11 | 65 |
> +-------+--------+
> | 12 | 23 |
> +-------+--------+
>
>
> Aber mir fehlen die Zeilen 09,01 und 02.

wenn er 09, 01, und 02 ausgeben soll und 03, 04, 99 und 1836 nicht, dann
musst Du ihm eine Liste der "gültigen" Monatszahlen geben, auf die er
sich beziehen kann. Woher soll er denn wissen, dass ausgerechnet 09, 01
und 02 fehlen und nicht 2946, 54238 und -66395?

Grüße, Matthias