Wenn Sie ein virtuelles Attribut erstellen, das jeden Bereich darstellt. Wenn die Bereiche linear wären, könnten Sie etwas tun wie:
SELECT 10*(FLOOR(value/10)), COUNT(*), MIN(id), MAX(id)
FROM yourtable
GROUP BY 10*(FLOOR(value/10));
Aber Ihre Bereiche sind nicht linear. Weiter sind sie nicht diskret! Unter der Annahme, dass Sie wirklich bedeuten Bereiche von 0-24, 25-49, 50-99 dann:
SELECT CASE
WHEN value>=100 THEN '100'
WHEN VALUE BETWEEN 50 AND 99 then '50-99'
WHEN VALUE BETWEEN 25 AND 49 THEN '25-49'
WHEN VALUE BETWEEN 0 AND 24 THEN '0-24'
ELSE 'ERROR'
END AS bucket,
COUNT(*), MIN(id), MAX(id)
FROM yourtable
GROUP BY CASE
WHEN value>=100 THEN '100'
WHEN VALUE BETWEEN 50 AND 99 then '50-99'
WHEN VALUE BETWEEN 25 AND 49 THEN '25-49'
WHEN VALUE BETWEEN 0 AND 24 THEN '0-24'
ELSE 'ERROR'
END
aber Ihr Beispiel Ausgabe zeigen, dass Sie auf Läufe von aufeinanderfolgenden Werten innerhalb eines Bereichs zu melden. "Konsekutiv" impliziert eine Bestellung - obwohl Ihr Eingabe-Set nach ID sortiert ist, sollten Sie angeben, welche Bestellung erforderlich ist.
Es ist möglich, dies in einer MySQL-Abfrage zu tun, aber der Code wird zu komplex
zu erhalten und mehr vernünftig in einer prozeduralen umgesetzt werden würde Programmiersprache.
Möchten Sie nur die Anzahl der Zahlen in Reichweite, oder möchten Sie auch die Spalte mit ID-Bereich, die ich nicht einmal weiß, wenn möglich? – Hatik
Sie haben die Beschreibung des Feldes idBetween vollständig weggelassen. Auch die Bereiche und Ihre Ergebnisse stimmen nicht überein. Zum Beispiel scheint die Aufnahme mit der ID 10 nicht im Bereich von 50-24 gezählt zu werden, obwohl der Wert 25 ist. Sie müssen also viel mehr erklären. – Shadow
auch die Bereiche sind Art von nicht logisch 100-49 50-24, wenn die Zahl 50 ist, bedeutet es, dass es in beiden zählt enthalten ist? – Hatik