Mysql
 sql >> база данни >  >> RDS >> Mysql

групиране по диапазон в mysql

Ето общ код за групиране по диапазон, тъй като извършването на оператор за case става доста тромаво.

Функцията 'floor' може да се използва за намиране на долната част на диапазона (не 'round', както е използвано в Bohemian) и добавяне на количеството (19 в примера по-долу), за да се намери горната част на диапазона. Не забравяйте да не припокривате долната и горната част на диапазоните!

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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql - времева марка за търсене по час от деня

  2. Налагане на съставно уникално ограничение, което зависи от стойността на родителската колона

  3. Как да възстановите база данни MySQL от .myd, .myi, .frm файлове

  4. MySQL wait_timeout променлива - GLOBAL срещу SESSION

  5. Как мога да преглеждам MySQL резултатен набор повече от веднъж, използвайки функциите mysql_*?