33 Stimmen

MySQL: GROUP BY Bereich - Anzahl kleiner, mittlerer und größerer Datensätze bestimmen

Tipp von Stefan Trost | 22.01.2013 um 20:25

Fragestellung: Gegeben sind zwei Vergleichwerte. Zum Beispiel 100 und 200. Wir möchten in einer MySQL-Tabelle alle Datensätze zählen, deren Wert in einer bestimmten Spalte kleiner als 100 oder größer als 200 ist oder dazwischen liegt und das Ergebnis dieser Zählung ausgeben.

Lösung: Wir können die Werte mit der folgenden SQL-Anweisung auslesen, wobei "tabelle" unsere Tabelle ist, "col" die interessierende Spalte und "id" ein eindeutiger Identifier jeder Zeile (das was wir zählen möchten). Der Name "bereich" ist frei wählbar und dient nur als Platzhalter, um im GROUP BY darauf referenzieren zu können. 100 und 200 sind die Cut-Off Werte, die wieder rein zufällig gewählt wurden.

SELECT 
   COUNT(id),

   IF ( tabelle.col < 100, 0,
       IF (
           tabelle.col < 200, 1, 2
       )   
   ) AS bereich

FROM tabelle WHERE ... GROUP BY bereich

Ein mögliches Ergebnis dieser Abfrage könnte so aussehen:

COUNT(id)    bereich
10           0
15           1
5            2

Wir haben also 10 Einträge kleiner als 100 gefunden, 15 Einträge kleiner als 200 und größer oder gleich 100 sowie 5 Einträge, die größer oder gleich 200 sind.

So funktioniert es: Einfach erklärt definieren wir uns eine neue Spalte "bereich" im Ergebnis. Diese wird abhängig von den beiden verschachtelten IF-Abfragen entweder auf 0, 1 oder 2 gesetzt. Wenn unsere Spalte "col" kleiner als 100 ist, wird das erste IF wirksam und "bereich" wird auf 0 gesetzt. Wenn nicht, gelangen wir zu der zweiten IF-Bedingung, die den Wert entweder auf 1 oder 2 setzt, je nachdem ob der Wert von "col" kleiner ist als 200. Anschließend gruppieren wir nach genau dieser Spalte "bereich" und bekommen die Anzahl der Einträge pro Bereich als Ergebnis.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.