SUM mit Kriterium

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SUM mit Kriterium

    Hallo.
    Ich habe folgendes Problem.

    Ich würde gerne summieren, aber nur wenn ein bestimmter Fall eintritt.

    Beispiel:

    Spalte 'betrag' soll summiert werden aber nur wenn in einer weiteren Spalte 'status' der Wert 'close' steht.

    Hab es bisher so versucht.

    IF(status='close',SUM(betrag))
    SUM(IF(status='close',betrag))

    Und noch einige weitere abenteuerliche Kombinationen, aber ich weiß nicht mehr weiter und im Forum finde ich auch nicht das passende.

    Hab ich jetzt einen Denkfehler oder geht sowas generell nicht.

    Danke für die Hilfe im Vorraus.
    Wir haben alle mal angefangen!

  • #2
    Re: SUM mit Kriterium

    Original geschrieben von Greaseball
    Spalte 'betrag' soll summiert werden aber nur wenn in einer weiteren Spalte 'status' der Wert 'close' steht.
    Du redest hier vom status im selben Datensatz?

    SELECT SUM(betrag) FROM ... WHERE status = 'close'
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Sorry hätte wohl den ganzen Query posten sollen.

      Es soll 2 mal summiert werden.

      Einmal wenn status='close' und wenn status='open'

      Das ganze sieht dann so aus:

      SELECT * FROM auszahlung

      Das Sternchen lasse ich jetzt mal als Platzhalter für die Summierung stehen.
      Wir haben alle mal angefangen!

      Kommentar


      • #4
        GROUP BY status

        evtl HAVING status IN ('open','close')

        EDIT:
        edit:

        nicht HAVING, sondern WHERE status in ('open', 'close')

        HAVING ist für Bedingungen an die Gruppenwerte.
        OffTopic:
        -hab-ich-jetzt-begriffen-
        Zuletzt geändert von mai; 12.06.2006, 18:10.

        Kommentar


        • #5
          SUM(IF(status='close', betrag, 0)) as statusClose,
          SUM(IF(status='open', betrag, 0)) as statusOpen
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Funktioniert.
            Danke
            Wir haben alle mal angefangen!

            Kommentar


            • #7
              Hätte da noch ne Frage.

              Kann ich einen, sagen wir mal, DEFAULT-Wert definieren, der im Fall das es nix zum summieren gibt, ausgegeben wird?

              Denn es wir kein Wert zurückgeben wenn die Kriterien nicht zutreffen.
              Wir haben alle mal angefangen!

              Kommentar


              • #8
                Du kannst mit mysql_num_rows prüfen, wieviel Datensätze du bekommen hast.

                Wie sieht deine Abfrage denn jetzt aus?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Das war es nicht was ich meinte.

                  Es geht allein um die Summierung mit der IF-Abfrage:

                  z.B:

                  SUM(IF(status='close', betrag, 0)) as statusClose,

                  Wenn es da nix zum summieren gibt weil in jeder Spalte status='open' steht, dann wird auch kein Wert zurückgeben. Also kein INT oder String.
                  Und ich wollte wissen ob man für diesen Fall im SQL einen Default-Wert ( in diesem Falle 0 ) definieren kann.

                  Oder muss man das mit PHP machen?
                  Wir haben alle mal angefangen!

                  Kommentar


                  • #10
                    Wenn nirgendwo close drinsteht, bekommst du doch 0 als Wert

                    Und nochmal: Wie sieht deine Abfrage denn jetzt aus?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      PHP-Code:
                      $ausgabe=dbassoc(dbquery("
                      SELECT 
                      SUM(IF(status='close', betrag, 0)) as close, 
                      SUM(IF(status='open', betrag, 0)) as open 
                      FROM auszahlung
                      "
                      ,__FILE__,__LINE__)); 
                      "dbassoc" und "dbquery" sind Funktionen

                      Und wenn die Kriterien nicht zuteffen wird kein Wert zurückgeben.
                      Gibt es denn kein Default-Wert den man definieren kann.
                      Wir haben alle mal angefangen!

                      Kommentar

                      Lädt...
                      X