Как подсчитать количество экземпляров каждого идентификатора внешнего ключа в таблице?

Вот мой простой вопрос SQL ...

У меня есть две таблицы:

Книги

-------------------------------------------------------
| book_id | author | genre | price | publication_date |
-------------------------------------------------------

Заказы

------------------------------------
| order_id | customer_id | book_id |
------------------------------------

Я хотел бы создать запрос, который возвращает:

--------------------------------------------------------------------------
| book_id | author | genre | price | publication_date | number_of_orders |
--------------------------------------------------------------------------

Другими словами, вернуть каждый столбец для ВСЕХ строк в Таблица книг вместе с вычисляемым столбцом с именем 'number_of_orders', который подсчитывает, сколько раз каждая книга появляется в таблице Orders. (Если книги нет в таблице заказов, книга должна быть указана в наборе результатов, но «number_of_orders» должно быть нулем .

Пока что я ' мы пришли к следующему:

SELECT
    books.book_id,
    books.author,
    books.genre,
    books.price,
    books.publication_date,
    count(*) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
    books.book_id,
    books.author,
    books.genre,
    books.price,
    books.publication_date

Это почти верно, но не совсем, потому что "number_of_orders" будет 1, даже если книга никогда не указана в таблице заказов. Более того, с учетом моего незнания SQL, я уверен, что этот запрос очень неэффективен.

Как правильно написать этот запрос? (Как бы то ни было, он должен работать в MySQL, поэтому я не могу использовать какие-либо другие специфические особенности производителя) .

Заранее спасибо!

52
задан Justin Johnson 14 September 2011 в 14:34
поделиться