sql >> Base de Datos >  >> RDS >> Mysql

agrupar por rango en mysql

Aquí hay un código general para agrupar por rango, ya que hacer una declaración de caso se vuelve bastante engorroso.

La función 'piso' se puede usar para encontrar la parte inferior del rango (no 'redondo' como usó Bohemian) y sumar la cantidad (19 en el ejemplo a continuación) para encontrar la parte superior del rango. ¡Recuerde no superponer la parte inferior y la parte superior de los rangos!

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)