sql >> Database >  >> RDS >> Mysql

groeperen op bereik in mysql

Hier is een algemene code om te groeperen op bereik, aangezien het behoorlijk omslachtig wordt om een ​​case-statement te maken.

De functie 'vloer' kan worden gebruikt om de onderkant van het bereik te vinden (niet 'rond' zoals Bohemian gebruikt), en voeg het bedrag toe (19 in het onderstaande voorbeeld) om de bovenkant van het bereik te vinden. Vergeet niet om de onder- en bovenkant van de reeksen niet te overlappen!

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. Toegang tot mysql-container vanuit een andere container

  2. .csv importeren met tijdstempelkolom (dd.mm.jjjj uu.mm.ss) met psql \copy

  3. MySql Zacht verwijderen

  4. MySQL integreren met Python in Windows