8.9Kпросмотров
82.1%от подписчиков
18 августа 2025 г.
📷 ФотоScore: 9.8K
Задача из собеседования (Cian, middle): считаем, сколько раз издавалось произведение 📚 Схема: 🔹Books(id, title) — произведение 🔹BookEditions(id, book_id, publish_year, pages) — издание произведения 🔹BookCopies(id, edition_id, inventory_num) — экземпляр издания 🎯 Формулировка Найти произведения, которые издавались более 5 раз. Вывести только название произведения (title). 🧪 Сначала решите сами! Откройте задачу и попробуйте написать запрос без подсказок: 👉 https://sql-academy.org/ru/trainer/tasks/125 — Разбор —— Как подойти шаг за шагом: 1️⃣ Что нужно посчитать? Количество изданий на каждое произведение → считаем строки в BookEditions по book_id. 2️⃣ Где лежит название? В Books. Значит, к агрегату нужно присоединить Books по Books.id = BookEditions.book_id. 3️⃣ По чему группировать? По уникальному идентификатору книги (и для вывода — по названию): GROUP BY b.id, b.title. 4️⃣ Как отфильтровать только те, у кого >5 изданий? Через HAVING, потому что фильтруем по агрегату (COUNT). Правильный ответ SELECT b.title FROM BookEditions e JOIN Books b ON b.id = e.book_id GROUP BY b.id, b.title HAVING COUNT(e.id) > 5; На что обратить внимание ❗️ 🔹Группируем по b.id, b.title, а не только по b.title: два разных произведения могут теоретически иметь одинаковое название; по id безопаснее. А если в условии скрыт нюанс «издавалось в разные годы»? Иногда собеседующий подразумевает уникальные годы издания. Тогда используйте COUNT(DISTINCT e.publish_year) SELECT b.title FROM BookEditions e JOIN Books b ON b.id = e.book_id GROUP BY b.id, b.title HAVING COUNT(DISTINCT e.publish_year) > 5;
8.9K
просмотров
1608
символов
Да
эмодзи
Да
медиа

Другие посты @sqlacademyofficial

Все посты канала →