Aquí está mi pregunta simple SQL ...¿Cómo contar el número de instancias de cada ID de clave externa en una tabla?
Tengo dos tablas:
Libros
-------------------------------------------------------
| book_id | author | genre | price | publication_date |
-------------------------------------------------------
órdenes
------------------------------------
| order_id | customer_id | book_id |
------------------------------------
que me gustaría crear una consulta que devuelve:
--------------------------------------------------------------------------
| book_id | author | genre | price | publication_date | number_of_orders |
--------------------------------------------------------------------------
En otras palabras, devuelva cada columna para TODAS las filas en la tabla Libros, junto con una columna calculada llamada 'number_of_orders' que cuenta el número de veces que cada libro aparece en la tabla Pedidos. . (Si un libro no se da en la tabla de pedidos, el libro debería ser listados en el conjunto de resultados, pero "number_of_orders" debe ser cero
Hasta el momento, se me ha ocurrido con esto:
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
Eso es casi derecho, pero no del todo, porque "number_of_orders" serán 1, incluso si un libro no aparece en la tabla Pedidos. por otra parte, dada mi falta de conocimientos de SQL, estoy seguro de que esto la consulta es muy ineficiente.
¿Cuál es la forma correcta de escribir esta consulta? (Por lo que vale, esto tiene que funcionar en MySQL, por lo que no puedo usar ninguna otra característica específica del proveedor).
¡Gracias de antemano!
Su última afirmación podría ser algo engañoso. La función COUNT ignora los valores NULL cuando agrega datos. El motivo por el que COUNT (*) devuelve los recuentos incorrectos aquí es porque cuenta las filas en lugar de una columna específica. Solo quiero aclarar para el OP –
Actualicé la respuesta, thx. – Fabio
@Fabio ¿Cómo se llama esta consulta en particular, para contar entradas relacionadas en otra tabla? ¿Tiene algún nombre académico? –