MySQL запрос данных по размеру шага в заданном диапазоне - PullRequest
0 голосов
/ 15 марта 2020

Таким образом, в основном у меня есть таблица пользователей, в которой есть столбец с именем «complete_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. Есть идеи?

1 Ответ

0 голосов
/ 15 марта 2020

Одна идея состоит в том, чтобы сначала создать вспомогательную таблицу со значениями 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...