SUM -> Tabellen-Spalte mit eintrag "NULL"
Margrith
- php
Hallo Forianer
Ich mache eine SUM-Abfrage auf eine Tabelle, in der in einigen Spalten "NULL" drinsteht. Nun habe ich bemerkt, dass wenn eben
der Wert "NULL" in einer Spalte steht, das Resultat "0" ist.
Dies, obschon andere Spalten einen Wert beinhalten.
Schreibe ich nun in die Spalte mit dem Wert "NULL" eine "0" rein,
funktioniert SUM korrekt.
Was mache ich falsch? Leider hat mit googlen nicht weitergebracht.
Darum wende ich mich mit meiner Frage an Euch.
Schon mal Danke für Eure Hilfe & liebe Grüsse
Margrith
Ich bin mir nicht sicher was Du mit SUM meinst, aber wenn dieses SUM normale SQL Queries versteht, kannst Du expilzit nach NULL Werten suchen
WHERE feldname IS NULL
WHERE feldname IS NOT NULL
Es wird Dir eine 0 zurückgegeben weil NULL Werte mit true/false Aussagen vergleichbar sind NULL/0/false. NULL besagt nur das der Wert nicht gesetzt ist. NUll Values sind anders als leere, aber gesetzten Werten, NULL beduetet, daß etwas nicht gesetzt wurde.
Hallo Sasha
Ich meine eine Abfrage wie:
$SUM='SUM(aktuelles)+SUM(partner)';
$result_summe=MYSQL_QUERY("SELECT $SUM as anz FROM tbl_counter WHERE monat = '$monataktuell'"); $obj=mysql_fetch_object($result_summe); $anz=$obj->anz;
Eben: steht z.B. "Null" in der Spalte 'aktuelles' und "3" in der Spalte 'partner', ist der Rückgabewert = "0". Sollte aber "3" sein.
Ändere ich den Wert der Spalte 'aktuelles' auf "0", ist der Rückgabewert = "3".
Gruss
Margrith
Achso, alles klar.
Aber Du kannst dann doch mit einer where Klausel abfangen ob das Feld NULL ist
$result_summe=MYSQL_QUERY("SELECT $SUM as anz FROM tbl_counter WHERE monat = '$monataktuell' AND WHERE aktuelles IS NOT NULL AND WHERE partner IS NOT NULL");
Oder wie auch imemr Du es brauchst...
Viele Grüße
Sasha
Achso, alles klar.
Aber Du kannst dann doch mit einer where Klausel abfangen ob das Feld NULL ist
Dies ist natürlich auch eine Lösung. Jedoch sehr umständlich für
mich. Bin eher faul! ;)
Werde schauen, dass in der DB keine Werte mehr mit "NULL" drinnstehen.
Grüsse
M
Hallo Margrith,
Meine folgenden Ausführungen beziehen sich auf MySQL. Wenn Du ein anderes
Datenbankmanagementsystem benutzt, so musst Du die entsprechende Doku zu
Rate ziehen.
Ich mache eine SUM-Abfrage auf eine Tabelle, in der in einigen Spalten "NULL" drinsteht. Nun habe ich bemerkt, dass wenn eben
der Wert "NULL" in einer Spalte steht, das Resultat "0" ist.
Dies, obschon andere Spalten einen Wert beinhalten.
Schreibe ich nun in die Spalte mit dem Wert "NULL" eine "0" rein,
funktioniert SUM korrekt.
Laut Handbuch, http://dev.mysql.com/doc/mysql/en/problems-with-null.html ignoriert SUM NULL-Werte. Bedenke allerdings, dass der Ausdruck
1 + NULL
zum Ergebnis
NULL
ausgewertet wird.
Vielleicht hilft Dir IFNULL, siehe http://dev.mysql.com/doc/mysql/en/control-flow-functions.html.
W
Freundliche Grüsse,
Vinzenz
Laut Handbuch, http://dev.mysql.com/doc/mysql/en/problems-with-null.html ignoriert SUM NULL-Werte. Bedenke allerdings, dass der Ausdruck
1 + NULL
zum Ergebnis
NULL
ausgewertet wird.
Hallo Vincenz
Danke für den Hinweis. Ich denke, dass ich da ansetzen muss.
Am einfachsten wird es wohl sein, die mySQL-DB soweit zu
bringen, eine "0" anstelle von "NULL" in die DB zu schreiben,
wenn kein WErt vorhanden ist.
Grüsse
Margrith
Hallo Margrith,
Am einfachsten wird es wohl sein, die mySQL-DB soweit zu
bringen, eine "0" anstelle von "NULL" in die DB zu schreiben,
wenn kein WErt vorhanden ist.
Du suchst die Funktion IFNULL(), siehe http://dev.mysql.com/doc/mysql/en/control-flow-functions.html,
auf die ich bereits in meinem ersten Posting verwiesen habe.
Freundliche Grüsse,
Vinzenz
Am einfachsten wird es wohl sein, die mySQL-DB soweit zu
bringen, eine "0" anstelle von "NULL" in die DB zu schreiben,
wenn kein WErt vorhanden ist.
ALTER TABLE tabelle
CHANGE feld
feld
INT( 11 ) DEFAULT '0' NOT NULL
NOT NULL wandelt "keine Eingabe"/NULL in den DEFAULT-Wert um. O.g. Befehl macht das zusätzlich zum Änderen der Feld-Deklaration auch gleich bei den bestehenden Datensätzen.