Hier is een algemene code om te groeperen op bereik, aangezien het behoorlijk omslachtig wordt om een case-statement te maken.
De functie 'vloer' kan worden gebruikt om de onderkant van het bereik te vinden (niet 'rond' zoals Bohemian gebruikt), en voeg het bedrag toe (19 in het onderstaande voorbeeld) om de bovenkant van het bereik te vinden. Vergeet niet om de onder- en bovenkant van de reeksen niet te overlappen!
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)