Mysql
 sql >> Datenbank >  >> RDS >> Mysql

gruppieren nach bereich in mysql

Hier ist allgemeiner Code zum Gruppieren nach Bereich, da das Erstellen einer Case-Anweisung ziemlich umständlich wird.

Die Funktion „Boden“ kann verwendet werden, um das untere Ende der Spanne zu finden (nicht „rund“, wie es bei Bohemia verwendet wird), und den Betrag (19 im Beispiel unten) hinzufügen, um das obere Ende der Spanne zu finden. Denken Sie daran, die Unter- und Obergrenze der Bereiche nicht zu überlappen!

mysql> create table new_table (user_number int, diff int);
Query OK, 0 rows affected (0.14 sec)

mysql>  insert into new_table values (2, 0), (1, 28), (2, 32), (1, 40), (1, 53),
        (1, 59), (1, 101), (1, 105), (2, 108), (2, 129), (2, 130), (1, 144);
Query OK, 12 rows affected (0.01 sec)
Records: 12  Duplicates: 0  Warnings: 0

mysql> select concat(21*floor(diff/21), '-', 21*floor(diff/21) + 20) as `range`,
       count(*) as `number of users` from new_table group by 1 order by diff;
+---------+-----------------+
| range   | number of users |
+---------+-----------------+
| 0-20    |               1 |
| 21-41   |               3 |
| 42-62   |               2 |
| 84-104  |               1 |
| 105-125 |               2 |
| 126-146 |               3 |
+---------+-----------------+
6 rows in set (0.01 sec)