Выберите количество строк, соответствующих условию, сгруппированных по приращениям Id в MySQL

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

| 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, как в приведенном выше примере?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете разделить идентификатор на 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)

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

SELECT CEIL(id/5), COUNT(*)
FROM table
WHERE value = 'a'
GROUP BY CEIL(id/5)

Другие вопросы по теме