Linuchs: mySQL COUNT

Moin,

ich möchte Datensätze zählen, wenn der Wert eines Feldes größer ist als 0 (Ziffer 0). Dieses habe ich versucht in der Hoffnung, dass NULL nicht gezählt wird …

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# locale Tabelle eventbuchungen
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
 COUNT(*)           anzahl_saetze
,MAX(last_modified) last_modified
,COUNT(IF gebuchte_event_id = 0, NULL, gebuchte_event_id) anzahl_buchungen
FROM    tm_eventbuchungen
WHERE   owner_id  = 16

... und bekomme den Fehler

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'gebuchte_event_id = 0, NULL, gebuchte_event_id) anzahl_buchungen FROM tm_even' at line 7

Wie kann ich den Wert 0 beim Zählen ausschließen?

Linuchs

  1. die Beschreibung eines Problems ist ja schon die halbe Lösung.

    Ich muss Klammmern beim IF() setzen.

    Linuchs

    1. Hallo,

      Ich muss Klammmern beim IF() setzen.

      Für die If-Funktion hast du Recht, aber ist das wirklich das was du suchst? Warum setzt du ins Count() nicht einfach ein WHERE Bedingung > 0?

      Gruß
      Kalk

      1. Hello,

        Ich muss Klammmern beim IF() setzen.

        Für die If-Funktion hast du Recht, aber ist das wirklich das was du suchst? Warum setzt du ins Count() nicht einfach ein WHERE Bedingung > 0?

        Vielleicht hat er auch negative Buchungen?

        *scnr*

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es
        Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
      2. Tach!

        Warum setzt du ins Count() nicht einfach ein WHERE Bedingung > 0?

        Bist du sicher, dass das erlaubte Syntax ist?

        dedlfix.

        1. Hallo,

          Bist du sicher, dass das erlaubte Syntax ist?

          Jetzt wo du fragst, natürlich nicht mehr. Aber wäre nicht trotzdem der zu gehende Weg, erstmal per where die Datensätze einschränken und die dann per count(*) zu zählen?

          Gruß
          Kalk

          1. Tach!

            Aber wäre nicht trotzdem der zu gehende Weg, erstmal per where die Datensätze einschränken und die dann per count(*) zu zählen?

            Er will ja beides zählen, die uneingeschränkten auch, und da kann er die Menge nicht im WHERE verringern. Nur eine zweite Query ginge dann noch, aber das muss ja nicht sein.

            dedlfix.

            1. Hallo,

              Er will ja beides zählen

              Woher weißt du das?

              Gruß
              Kalk

              1. Tach!

                Er will ja beides zählen

                Woher weißt du das?

                Seine SELECT-Klausel hat es mir verraten. Da stehen zwei COUNT() drin.

                dedlfix.

        2. Hallo,

          Warum setzt du ins Count() nicht einfach ein WHERE Bedingung > 0?

          Bist du sicher, dass das erlaubte Syntax ist?

          Wenn ich die Referenz richtig verstehe, müsste Count('Feld' > 0) gehen.

          Gruß
          Kalk

          1. Tach!

            Wenn ich die Referenz richtig verstehe, müsste Count('Feld' > 0) gehen.

            'Feld' > 0 liefert true (1) oder false (0), aber nicht NULL. Und NULL oder nicht ist das Kriterium bei COUNT(). Man kann aber statt IF() wie folgt abkürzen: COUNT(NULLIF('Feld', 0))

            dedlfix.

            1. Hallo,

              'Feld' > 0 liefert true (1) oder false (0), aber nicht NULL. Und NULL oder nicht ist das Kriterium bei COUNT(). Man kann aber statt IF() wie folgt abkürzen: COUNT(NULLIF('Feld', 0))

              ahja, jetzt weiß ich wieder, warum ich bisher mehrere große Bögen um Datenbankgeschichten gemacht habe…

              Gruß
              Kalk