SQL‑запрос: получить имена писателей, у которых книг больше пяти (GROUP BY + HAVING)

Соедините Author и Book по author_id, сгруппируйте по автору и примените HAVING COUNT(b.id) > 5. Группировка по id не объединит разных авторов с одинаковыми именами.

Короткий ответ

Что ответить на собеседовании

Соедините Author и Book по author_id, сгруппируйте по автору и примените HAVING COUNT(b.id) > 5. Группировка по id не объединит разных авторов с одинаковыми именами.

Подробный разбор

Ответ с пояснениями

Условие

Составьте запрос, который выводит всех авторов, у которых количество записей в таблице книг превышает пять. Для получения данных используйте две связанные таблицы: Author и Book. Таблица Author содержит столбцы id и name, а таблица Book – id, name и author_id, где author_id является внешним ключом, указывающим на запись в Author. Запрос должен быть написан на чистом SQL с применением агрегирующей функции и условия HAVING.

Author: id name

Book: id name author_id

Ответ

Соедините Author и Book по author_id, сгруппируйте по автору и примените HAVING COUNT(b.id) > 5. Группировка по id не объединит разных авторов с одинаковыми именами.

Запрос:

SELECT a.name
FROM Author AS a
JOIN Book AS b ON b.author_id = a.id
GROUP BY a.id, a.name
HAVING COUNT(b.id) > 5;

WHERE фильтрует исходные строки, а HAVING — уже сформированные группы, поэтому условие на число книг находится именно в HAVING. INNER JOIN достаточен: автор без книг всё равно не подходит. При одинаковых именах результат может содержать две одинаковые строки, относящиеся к разным людям; добавьте a.id в SELECT, если нужна идентификация.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее