Отбор уникальных названий книг, у которых более трёх авторов

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

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

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

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

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

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

Условие

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

SELECT Bk.name
FROM BooksAuthor AS BA2
JOIN Author AS Auth ON BA2.author_id = Auth.id
JOIN Book AS Bk ON BA2.book_id = Bk.id
GROUP BY Bk.name
HAVING COUNT(DISTINCT Auth.id) > 3;

Ответ

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

Вариант для непустых названий с учётом дублей связей:

WITH unique_names AS (
    SELECT name
    FROM Book
    GROUP BY name
    HAVING COUNT(*) = 1
)
SELECT b.name
FROM Book AS b
JOIN unique_names AS u ON u.name = b.name
JOIN BooksAuthor AS ba ON ba.book_id = b.id
JOIN Author AS a ON a.id = ba.author_id
GROUP BY b.id, b.name
HAVING COUNT(DISTINCT a.id) > 3;

Проверка COUNT(*) выполняется до соединения с авторами, поэтому число строк связей не искажает уникальность названия. Если NULL-названия допустимы, отдельно определите, нужно ли их включать и как сравнивать.

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

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

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

Подробнее