Сгруппируйте книги по автору и выберите группы с 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), но для показанных двух таблиц это избыточно.