Gruppieren/Zusammenfassen möglich?
Robert
- datenbank
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
Hi,
ich hab Mysql 4.0.18 zur Verfügung.
kennt MySQL in dieser Version eine DECODE()-Funktion o.ä.?
Cheatah
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
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
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
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
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