MySQL在给定范围内按步长查询数据

MySQL在给定范围内按步长查询数据,mysql,Mysql,所以基本上我有一个用户表,它有一个名为“completed_surveys”的列,它保存了完成的调查的总数 我需要创建一个查询,该查询将采用步长编号,并按该范围对它们进行分组 符合我需要的示例结果: +---------+-------------------+ | range | completed_surveys | +---------+-------------------+ | 0-14 | 4566 | | 14-28 |

所以基本上我有一个用户表,它有一个名为“completed_surveys”的列,它保存了完成的调查的总数

我需要创建一个查询,该查询将采用步长编号,并按该范围对它们进行分组

符合我需要的示例结果:

+---------+-------------------+
|  range  | completed_surveys |
+---------+-------------------+
| 0-14    |              4566 |
| 14-28   |              3412 |
| 28-42   |              5456 |
| 42-56   |                33 |
| 56-70   |                31 |
| 70-84   |               441 |
| 84-98   |               576 |
| 98-112  |                23 |
| 112-126 |                12 |
| 126-140 |                 1 |
+---------+-------------------+
select concat(what should i add here??) as `range`,
       count(users.completed_surveys) as `completed_surveys` from users WHERE users.completed_surveys > 0 group by 1 order by users.completed_surveys;
到目前为止我拥有的:

+---------+-------------------+
|  range  | completed_surveys |
+---------+-------------------+
| 0-14    |              4566 |
| 14-28   |              3412 |
| 28-42   |              5456 |
| 42-56   |                33 |
| 56-70   |                31 |
| 70-84   |               441 |
| 84-98   |               576 |
| 98-112  |                23 |
| 112-126 |                12 |
| 126-140 |                 1 |
+---------+-------------------+
select concat(what should i add here??) as `range`,
       count(users.completed_surveys) as `completed_surveys` from users WHERE users.completed_surveys > 0 group by 1 order by users.completed_surveys;

我认为这个查询是正确的,但是在concat函数中,我真的不知道如何将前面的数字增加14。有什么想法吗?

一个想法是首先创建一个值为0..9的帮助表

CREATE TABLE tmp ( i int );
INSERT INTO tmp VALUES (0) , (1) ... (9);
然后连接两个表:

SELECT concat(i,' - ',(i+1)*7) as `range`,
  count(users.completed_surveys) as `completed_surveys` from users
INNER JOIN tmp ON (users.completed_surveys>tmp.i AND users.completed_surveys<=(i+1)*7)
WHERE users.completed_surveys > 0 
GROUP BY tmp.i
ORDER BY tmp.i
选择concat(i',-',(i+1)*7)作为“范围”,
将(用户.已完成的调查)统计为来自用户的“已完成的调查”
内部加入tmp ON(users.completed_surveys>tmp.i和users.completed_surveys 0
tmp.i分组
tmp.i订购
请参见