MySQL GROUP: Ist ein bestimmter Wert enthalten?
Murmelin
- datenbank
Hallo,
wenn ich Datensätze mit GROUP BY zusammenfasse, kann ich z.B. den MIN und den MAX Wert gewinnen.
Gibt es die Möglichkeit festzustellen, ob ein bestimmter Wert dabei ist?
Merkwürdig, wenn ich als Browser Adresse mysql.com/group eingebe, kommt eine Oracle-Seite.
MfG Murmelin
Hallo,
wenn ich Datensätze mit GROUP BY zusammenfasse, kann ich z.B. den MIN und den MAX Wert gewinnen.
Gibt es die Möglichkeit festzustellen, ob ein bestimmter Wert dabei ist?
dafür ist die HAVING-Klausel zuständig.
Merkwürdig, wenn ich als Browser Adresse mysql.com/group eingebe, kommt eine Oracle-Seite.
nicht merkwürdig: die MySQL AB wurde 2008 von Sun Microsystems übernommen. Sun wiederum wurde durch Übernahme 2010 mit Oracle verschmolzen ...
Freundliche Grüße
Vinzenz
Hallo, Vinzenz,
dafür ist die HAVING-Klausel zuständig.
Die HAVING- Klausel kenne ich, die greift aber erst, *nach* dem GROUP BY
Mein Problem:
Ich liste Orte auf (GROUP BY orte), zu jedem Ort gebe ich die Anzahl von Events an. Nun möchte ich wissen, ob *heute* ein Event dabei ist: Dann markiere ich den Ort besonders.
,IF(MIN(trm1.tag)='".date('Y-m-d',time())."',1,0) heute
Sofern das kleinste Datum heute ist, klappt es. Aber auch nur dann.
MfG Murmelin
Hallo,
dafür ist die HAVING-Klausel zuständig.
Die HAVING- Klausel kenne ich, die greift aber erst, *nach* dem GROUP BY
Ich liste Orte auf (GROUP BY orte), zu jedem Ort gebe ich die Anzahl von Events an. Nun möchte ich wissen, ob *heute* ein Event dabei ist: Dann markiere ich den Ort besonders.
das war mir nicht klar :-(
Wie üblich gibt es verschiedene Möglichkeiten, Dein Problem zu lösen. Ersetze zunächst in Deiner Abfrage die Datumsspalte durch eine berechnete Spalte, die so aussieht wie Deine:
SELECT
spaltenliste,
-- ich nehme an, die Spalte "tag" ist vom Datentyp DATE :-)
IF(trm1.tag = [link:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_curdate@title=CURDATE()], 1, 0)
FROM
trm1
[...]
Nun hast Du bei Deinen Datensätzen genau dann eine 1 stehen, wenn heute ein Event ist, sonst eine 0. Daher kannst Du das von Dir gewünschte Ergebnis bekommen, wenn Du nun beim Gruppieren MAX() auf diese berechnete Spalte anwendest:
SELECT
spaltenliste,
MAX(IF(trm1.tag = CURDATE(), 1, 0)) heute
FROM
trm1
[...]
GROUP BY
ort,
[...]
Nun hast Du in "heute" genau dann eine 1 stehen, wenn am Ort heute ein Event stattfindet.
Freundliche Grüße
Vinzenz