MySQL - Mostrar los clientes con y sin pedidos

 
Vista:

Mostrar los clientes con y sin pedidos

Publicado por Jose R. Onís (1 intervención) el 26/10/2009 15:47:40
Hola a todos y gracias de antemano,

en una anterior consulta os pedia ayuda para obtener los datos de los pedidos realizados de un ejemplo con clientes y pedidos. El problema es el siguiente:

Si realizo la siguiente consulta,

SELECT nombre, fecha_pedido
FROM pedidos
WHERE cliente = 'juan'

el número de resultados podría ser 0 o 1 o más.

de todos modos esta consulta no me sirve porque no quiero especificar ningún cliente sino que seleccione todos los clientes de la tabla clientes y los compare, entonces probé con algo así.

SELECT cliente, count(*)
FROM pedidos
GROUP BY cliente
ORDER BY cliente ASC

en este caso me devuelve no solo un cliente sino todos, lo cual está muy bien, pero sigo sin tener el dato de aquellos clientes que no han realizado ningún pedido. Es decir existe alguna manera de que comparando la tabla clientes con la tabla pedidos me diga algo así?

NOMBRE PEDIDOS
juan 2
luis 0
carlos 12

etc...

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Mostrar los clientes con y sin pedidos

Publicado por Gonzalo GC (339 intervenciones) el 26/10/2009 16:20:59
En una tabla PEDIDOS sólo tendrás los clientes que hayan hecho efectivamente un pedido. Para obtener los nque NO lo hicieron deberás cruzar la tabla clientes con la de pedidos.

SELECT nombre, IFNULL(COUNT(nro_pedido), 0) Pedidos
FROM cliente C LEFT JOIN pedido P ON C.cliente_id = P.cliente_id;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mostrar los clientes con y sin pedidos

Publicado por Jose R Onis (2 intervenciones) el 26/10/2009 16:41:41
Gracias Gonzalo pero sigo sin entenderlo, por más que intento me da un error. No se que significa el nro_pedido, te digo como tengo las tablas hechas para ver si me puedes ayudar.

CLIENTES
id_cliente
cliente
direccion
etc...

PEDIDOS
id_pedido
cliente
fecha
producto
etc...

ahora con esto, quiero sacar un resumen del mes de octubre por ejemplo, donde aquellos clientes que hayan hecho pedidos me ponga la cantidad de pedidos y los que no han hecho ninguno me diga 0.

Si hago esto:

SELECT cliente, count(*)
FROM pedidos
where pedidos.fecha between '2009-10-1' and '2009-10-31'
GROUP by cliente

me muestra los clientes que hayan hecho por lo menos un pedido en el mes indicado, pero claro los que no han hecho ningún pedido no aparecen porque no existen en la tabla pedidos, ahora mi pregunta es ¿es posible que me devuelva tanto los que han hecho pedidos como los que no?

gracias nuevamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mostrar los clientes con y sin pedidos

Publicado por Gonzalo GC (339 intervenciones) el 26/10/2009 18:55:49
Empecemos por el principio:
Si quieres una ayuda precisa, tienes que aportar datos precisos. De lo contrario tenemos que empezar a imaginar que tus tablas tienen los campos que suponemos que DEBEN TENER porque al menos DEBERÏAN RESPETAR el modelo E-R.

¿Qué significa el "nro_pedido"? Es obvio: En tu tabla, es id_pedido.... ¿qué más podía ser?

Mira bien el modelo que te puse Y PON LOS NOMBRES DE LOS CAMPOS QUE TIENES EN TUS TABLAS...

SELECT nombre, IFNULL(COUNT(id_pedido), 0) Pedidos
FROM cliente C LEFT JOIN pedido P ON C.id_cliente = P.cliente
WHERE C.id_cliente AND P.id_pedido IS NULL;

Regla mnemotécnica Nro 1: Si tienes un campo en una tabla que es una FK de otra tabla, se le debe poner e mismo nombre que en su tabla de origen. Evita confusioness y facilita la escritura.
Regla mnemotécnica Nro 2: Un campo PK numérico en una tabla debe llevar como nombre parte del nombre de la tabla, para evitar que al usarlo como FK se produzcan confusiones o duplicaciones de nombres. Evita confusioness y facilita la escritura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mostrar los clientes con y sin pedidos

Publicado por Nelson Fernando (1 intervención) el 21/10/2017 15:37:04
primero tienes que relacionar ambas tablas y establecer que campos son los relacionados. y alli podras utilizar Join o INNER JOIN o LEFT JOIN o RIGHT JOIN.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar los clientes con y sin pedidos

Publicado por Anyela (1 intervención) el 16/07/2014 16:46:46
Gonzalo quisiera saber como obtener este pregunta:
1. Se necesita conocer los pedidos en el mes de Febrero o Julio y que estén Cancelados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar