Соедините Author и Book по author_id, сгруппируйте по автору и примените HAVING COUNT(b.id) > 5. Группировка по id не объединит разных авторов с одинаковыми именами.
SQL‑запрос: получить имена писателей, у которых книг больше пяти (GROUP BY + HAVING)
Соедините 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, если нужна идентификация.