Robert: Gruppieren/Zusammenfassen möglich?

Hallöle,

ich hab Mysql 4.0.18 zur Verfügung.

Ich habe 2 Abfragen:

SELECT COUNT(*) FROM mytable WHERE mycolumn = 0;

und

SELECT COUNT(*) FROM mytable WHERE mycolumn <> 0;

um die beiden Zähler zu bekommen für die Fälle, daß die Spalte auf 0 gesetzt ist und daß sie nicht auf 0 gesetzt ist.
Die Spalte ist vom Typ TINYINT, es kommen nur Werte von 0 bis etwa 30 vor.

Die beiden Abfragen werden immer direkt nacheinander ausgeführt.
Mich stört, daß es zwei getrennte Abfragen sind.

Wenn ich aber nach mycolumn gruppiere:

SELECT COUNT(*), mycolumn FROM mytable GROUP BY mycolumn;

bekomme ich für jeden existenten Wert von mycolumn einen Zähler - die Fälle mycolumn <> 0 werden nicht mehr zusammengefaßt.

Gibt es irgendeinen Trick, das mit nur einer Abfrage hinzubekommen?

TIA,
cu,
Robert

  1. Hi,

    ich hab Mysql 4.0.18 zur Verfügung.

    kennt MySQL in dieser Version eine DECODE()-Funktion o.ä.?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallöle,

      ich hab Mysql 4.0.18 zur Verfügung.
      kennt MySQL in dieser Version eine DECODE()-Funktion o.ä.?

      Ja. Aber ich weiß jetzt nicht, wie mir das weiterhelfen sollte.
      Die Daten in der Spalte sind ja nicht verschlüsselt.

      cu,
      Robert

      1. Hi,

        kennt MySQL in dieser Version eine DECODE()-Funktion o.ä.?
        Ja. Aber ich weiß jetzt nicht, wie mir das weiterhelfen sollte.
        Die Daten in der Spalte sind ja nicht verschlüsselt.

        ah, bei MySQL macht DECODE() leider etwas anderes, als ich es gewohnt bin. Die Funktion(?), die ich meine, heißt bei MySQL offenbar IF().

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Hallöle,

    ich hab Mysql 4.0.18 zur Verfügung.
    SELECT COUNT(*) FROM mytable WHERE mycolumn = 0;
    SELECT COUNT(*) FROM mytable WHERE mycolumn <> 0;
    um die beiden Zähler zu bekommen für die Fälle, daß die Spalte auf 0 gesetzt ist und daß sie nicht auf 0 gesetzt ist.

    Lösung gefunden:

    SELECT COUNT(*), mycolumn <> 0 AS dummy FROM mytable GROUP BY dummy ORDER BY dummy

    Auch wenn die Funktion DECODE mir nicht weitergeholfen hat, hat mir die Idee, da eine Funktion einzusetzen, den Schubs in die richtige Richtung gegeben ==> Danke, Cheatah!

    cu,
    Robert

    1. yo,

      mich verwundert deine lösung ein wenig. falls noch von interesse, hier eine andere.

      SELECT COUNT(IF(mycolumn=0, 1, NULL)), COUNT(IF(mycolumn<>0, 1, NULL))
      FROM mytable

      Ilja

      1. Hallöle,

        mich verwundert deine lösung ein wenig. falls noch von interesse, hier eine andere.

        Aber sicher ist das von Interesse.

        SELECT COUNT(IF(mycolumn=0, 1, NULL)), COUNT(IF(mycolumn<>0, 1, NULL))
        FROM mytable

        Auf die Lösung wäre ich von alleine nie gekommen. Sehr schön - das reduziert auch den Code für die Auswertung ganz gewaltig!

        Vielen Dank!

        cu,
        Robert