# MYSQL Gruppieren nach Intervallen



## darkpriest (22. März 2008)

Hallo,

ich bekomme aus einer Tabelle eine Liste mit den Standtagen und Wert pro Fahrzeug zurück!

Nun möchte ich diese in Intervalle gruppieren u. die Anzahl und den Wert pro Intervall angeben!

Also ich möchte 

alle Autos < 30 Standtage
alle Autos < 30 Standtage u. alle Autos > 60 Standtage

usw.

Hat jemand einen Ansatz oder Hinweis für dieses Problem?

Danke!

Darkpriest


----------



## Dunas (22. März 2008)

Möchtest du das mit einer Select-Abfrage erreichen?


----------



## darkpriest (22. März 2008)

Hallo,

ja eigentlich schon!

Ich weiß nur nicht, wie ich die Gruppierung zuordnen kann ..

Kannst du mir weiterhelfen?

Danke!


----------



## planb2000 (23. März 2008)

Hallo,

hast Du denn schon eine SQL-Query gebaut?

Wie sieht Deine Tabelle/n - Struktur aus.

Wenn ich mir eine Tabelle vorstelle in der folgendes steht

stand_tage, wert_auto
----------------,---------------
3              ,  150
2              ,    30
1              ,    30
7              ,   210

Dann würde die Abfrage für anzahl der autos <= 30 und > 60 so aussehen:

```
SELECT
           count (*) as ANZAHL
FROM
           meine_tabelle
WHERE
          wert_auto
BETWEEN
         30 AND 60
```


----------



## Dunas (23. März 2008)

In einer Schleife könnte er es machen, das ist kein problem. Aber ich glaube er wollte mit einer Abfrage alle Intervallen bekommen. 
Dazu ist mir leider nichts eingefallen. Du wirst es also mit einer Schleife machen müssen.

Dunas


----------



## Matthias Reitinger (23. März 2008)

Hallo,

vielleicht klappt's auch so:

```
SELECT
  COUNT(*) AS Anzahl,
  (Standtage DIV 30) * 30 AS MinTage,
  (Standtage DIV 30) * 30 + 29 AS MaxTage
FROM Tabelle
GROUP BY Standtage DIV 30
```

Grüße,
Matthias


----------



## Dunas (23. März 2008)

Mir kam gerade, wärend einer Gurkenmaske *g, eine Idee:

```
SELECT
  COUNT(*) AS Anzahl,
  If( 0 <= Standtage <= 30,0,Standtage) AS Intervall1,
  If(31 <= Standtage <= 60,1,Standtage) AS Intervall2,
  If(61 <= Standtage <= 90,2,Standtage) AS Intervall3
FROM Tabelle
GROUP BY Standtage DIV 30
```

Ich habe den Code nicht getestet, aber mit der Idee solltest du sicher weiter arbeiten können.


----------

