Я пытаюсь упростить этот SQL-запрос (я заменил настоящие имена таблиц метафорическими), в первую очередь избавиться от внутреннего запроса, но у меня застыли мозги, и я не могу придумать, как это сделать.
Меня больше всего беспокоит (помимо эстетики) производительность при больших нагрузках.
Целью запроса является подсчет всех книг, сгруппированных по жанрам, найденных на какой-либо конкретной полке, где хранится книга (отсюда и внутренний запрос, который эффективно сообщает, на какой полке считать книги).
SELECT g.name, count(s.book_id) occurances FROM genre g
LEFT JOIN shelve s ON g.shelve_id=s.id
WHERE s.id=(SELECT genre_id FROM book WHERE id=111)
GROUP BY s.genre_id, g.name
s.genre_id
не требуется в файлеGROUP BY
. Я тоже не понимаю, какs.id = b.genre_id
. Образцы данных и желаемые результаты прояснят, что вы хотите сделать. - person Gordon Linoff   schedule 20.10.2020