Авторы, написавшие более одной книги

Сгруппируйте книги по автору и выберите группы с COUNT(*) > 1, возвращая fullname. Группировка должна включать id, а не только имя.

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

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

Сгруппируйте книги по автору и выберите группы с COUNT(*) > 1, возвращая fullname. Группировка должна включать id, а не только имя.

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

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

Условие

Нужно вывести полные имена тех авторов, у которых количество написанных книг больше одной. Авторы без книг и с единственной книгой в результат не включаются.

CREATE TABLE authors (
    id INT PRIMARY KEY,
    fullname VARCHAR(128) NOT NULL
);

CREATE TABLE books (
    id INT PRIMARY KEY,
    title VARCHAR(128) NOT NULL,
    author_id INT REFERENCES authors(id)
);

Ответ

Сгруппируйте книги по автору и выберите группы с COUNT(*) > 1, возвращая fullname. Группировка должна включать id, а не только имя.

SELECT a.fullname
FROM authors AS a
JOIN books AS b ON b.author_id = a.id
GROUP BY a.id, a.fullname
HAVING COUNT(*) > 1;

Внутреннее соединение исключает авторов без книг. Условие HAVING применяется после группировки и оставляет авторов с двумя книгами и более. Одинаковые имена разных авторов не объединяются благодаря a.id.

Если позже в запрос добавятся другие связи один-ко-многим, строки книг могут размножиться. Тогда потребуется изменить структуру запроса или использовать COUNT(DISTINCT b.id), но для показанных двух таблиц это избыточно.

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

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

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

Подробнее