Как использовать результаты COUNT(Field) в запросе? - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть таблица Books, которая, в том числе, содержит поля Book, Category и Price. Как написать такой запрос, который вернёт список категорий, в которых есть определённое количество книг с заданной ценой. Для подсчёта числа книг, понятно, нужно использовать GROUP BY, но вот как потом фильтровать по полученным значениям? Т.е. запрос вида:
SELECT Category, COUNT(Book) FROM Books WHERE Price BETWEEN 100 AND 150 GROUP BY Book
вернёт список категорий и количество книг в указанном диапазоне цен. Понятно, что можно использовать временную таблицу для хранения результатов этого запроса, и потом выбирать из неё. А можно ли это в одном запросе сделать? И стоит ли, вообще, это объединять в один запрос?

Решение задачи: «Как использовать результаты COUNT(Field) в запросе?»

textual
Листинг программы
SELECT Category, COUNT(Book) FROM Books WHERE Price BETWEEN 100 AND 150 GROUP BY Book HAVING COUNT(Book) = 5

Объяснение кода листинга программы

В данном коде:

  1. Выполняется запрос SELECT к таблице Books, выбираются поля Category и COUNT(Book).
  2. Результат запроса используется для группировки данных по полю Book с помощью оператора GROUP BY.
  3. Применяется функция агрегации COUNT(Book), которая подсчитывает количество книг в каждой группе.
  4. С помощью оператора HAVING производится фильтрация результатов запроса по значению функции агрегации COUNT(Book), которое должно быть равно 5.
  5. Оператор WHERE применяется для фильтрации книг по значению поля Price, которое должно быть больше или равно 100 и меньше или равно 150.
  6. Результатом выполнения запроса будет набор данных, содержащий поля Category и COUNT(Book), где COUNT(Book) будет равно 5 для каждой категории книг, удовлетворяющих условию цены.

Оцени полезность:

7   голосов , оценка 4.286 из 5