Выберите количество строк, соответствующих условию, сгруппированных по приращениям Id в MySQL - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть таблица с автоинкрементным числовым первичным.Я пытаюсь получить количество строк, которые соответствуют условию, сгруппированному по приращениям их первичного ключа.Учитывая данные:

| id | value |
|----|-------|
| 1  |   a   |
| 2  |   b   |
| 3  |   a   |
| 4  |   a   |
| 5  |   b   |
| 6  |   a   |
| 7  |   b   |
| 8  |   a   |
| 9  |   b   |
| 10 |   b   |
| 11 |   a   |
| 12 |   b   |

Если бы я хотел знать, сколько строк соответствует value = 'a' для каждых пяти строк, результат должен быть:

| count(0) |
|----------|
|    3     |
|    2     |
|    1     |

Я могу вложить рядподзапросы в операторе SELECT, например:

SELECT (SELECT count(0) 
FROM table 
WHERE value = 'a' 
AND id > 0 
AND id <= 5) AS `1-5`,
(SELECT count(0)
FROM table
WHERE value = 'a'
AND id > 5
AND id <=10) AS `6-10`,
...

Но есть ли способ сделать это с помощью оператора GROUP BY или чего-то подобного, когда мне не нужно вручную записывать приращения?Если нет, есть ли более эффективный по времени метод, чем последовательность подзапросов в операторе SELECT, как в приведенном выше примере?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Следующий агрегированный запрос должен помочь:

SELECT CEIL(id/5), COUNT(*)
FROM table
WHERE value = 'a'
GROUP BY CEIL(id/5)
0 голосов
/ 31 декабря 2018

Вы можете разделить идентификатор на 5, а затем ceil результат:

SELECT   CONCAT((CEIL(id / 5.0) - 1) * 5, '-', CEIL(id / 5.0) * 5), COUNT(*)
FROM     mytable
WHERE    value = 'a'
GROUP BY CEIL(id / 5.0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...