Margrith: SUM -> Tabellen-Spalte mit eintrag "NULL"

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

  1. 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.

    1. 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

      1. 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

        1. 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

  2. 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

    1. 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

      1. 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

      2. 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.