group by range in mysql

后端 未结 8 1469
一向
一向 2020-12-05 14:31
Table:   
new_table                                                    
user_number  | diff                  
     2       |  0                      
     1       |          


        
8条回答
  •  一整个雨季
    2020-12-05 15:19

    Here is general code to group by range since doing a case statement gets pretty cumbersome.

    The function 'floor' can be used to find the bottom of the range (not 'round' as Bohemian used), and add the amount (19 in the example below) to find the top of the range. Remember to not overlap the bottom and top of the ranges!

    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)
    

提交回复
热议问题