Mysql
 sql >> Database >  >> RDS >> Mysql

gruppo per intervallo in MySQL

Ecco il codice generale per raggruppare per intervallo poiché eseguire un'istruzione case diventa piuttosto ingombrante.

La funzione 'floor' può essere utilizzata per trovare la parte inferiore dell'intervallo (non 'round' come usato in boemo) e aggiungere l'importo (19 nell'esempio seguente) per trovare la parte superiore dell'intervallo. Ricorda di non sovrapporre la parte inferiore e quella superiore degli intervalli!

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)