Murmelin: MySQL GROUP: Ist ein bestimmter Wert enthalten?

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

  1. 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

    1. 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

      1. 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

        1. Hallo,

          IF(trm1.tag = CURDATE(), 1, 0)

          Danke dir, das ist es. CURDATE kannte ich nicht.

          Murmelin