У меня есть таблица с автоматически увеличивающимся числовым первичным числом. Я пытаюсь получить количество строк, соответствующих условию, сгруппированных по приращениям их первичного ключа. Учитывая данные:
| 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, как в приведенном выше примере?






Следующий агрегированный запрос должен помочь:
SELECT CEIL(id/5), COUNT(*)
FROM table
WHERE value = 'a'
GROUP BY CEIL(id/5)