Mysql
 sql >> Base de données >  >> RDS >> Mysql

grouper par plage dans mysql

Voici un code général pour regrouper par plage car faire une déclaration de cas devient assez lourd.

La fonction 'floor' peut être utilisée pour trouver le bas de la plage (et non 'round' comme Bohemian utilisé), et ajouter le montant (19 dans l'exemple ci-dessous) pour trouver le haut de la plage. N'oubliez pas de ne pas chevaucher le bas et le haut des plages !

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)