Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Cómo obtener en UN QUERY: "SELECT * FROM `t1_usuarios` y su {# de registros} en `t2_c

Estas en el tema de Cómo obtener en UN QUERY: "SELECT * FROM `t1_usuarios` y su {# de registros} en `t2_c en el foro de Mysql en Foros del Web. hola, sé que es con una consulta INNER *, pero no sé como hacerlo. cuando ejecuto Código: SELECT usuario.*, COUNT(ventas.id) from `ventas` INNER JOIN `usuario` ...
  #1 (permalink)  
Antiguo 07/11/2019, 01:05
SLD
 
Fecha de Ingreso: diciembre-2013
Mensajes: 56
Antigüedad: 5 años, 10 meses
Puntos: 0
Cómo obtener en UN QUERY: "SELECT * FROM `t1_usuarios` y su {# de registros} en `t2_c

hola,
sé que es con una consulta INNER *, pero no sé como hacerlo.

cuando ejecuto
Código:
SELECT usuario.*,
COUNT(ventas.id) from `ventas`
INNER JOIN `usuario`
WHERE `ventas`.`id` = `usuario`.`id`
GROUP BY ventas.id
me descarta usuarios que tienen CERO compras.

Cómo puedo obtener cada uno de los usuarios + el total de compras de cada usuario?

Quizá con una consulta anidada tipo
Código:
SELECT usuario.*,usuario.id (SELECT COUNT(*) FROM ventas WHERE ventas.id = usuario.id) FROM usuario;
pero evidentemente está mal.


Gracias por la oruentación.
  #2 (permalink)  
Antiguo 07/11/2019, 09:30
 
Fecha de Ingreso: abril-2011
Mensajes: 42
Antigüedad: 8 años, 7 meses
Puntos: 10
Respuesta: Cómo obtener en UN QUERY: "SELECT * FROM `t1_usuarios` y su {# de registro

Creo que tienes que usar un RIGHT JOIN en vez de INNER JOIN.

INNER JOIN une todos los registros de la tabla "usuario" que se corresponden con otros registros de la tabla "ventas" (es decir, cuando usuario.id = ventas.id).

RIGHT JOIN hace lo mismo que INNER JOIN pero además selecciona los registros de la tabla derecha (usuario), que no se corresponden con ningún registro de la tabla "ventas" (es decir, los usuarios que no tienen ninguna venta). Las columnas restantes son rellenadas con NULL.

Como COUNT solamente cuenta los valores no nulos, COUNT(ventas.id) debería devolver cero en aquellos usuarios que no tienen ventas asociadas.

Código SQL:
Ver original
  1. SELECT usuario.*,
  2. COUNT(ventas.id) FROM ventas
  3. RIGHT JOIN usuario
  4. ON ventas.id = usuario.id
  5. GROUP BY usuario.id

PD: El GROUP BY debe ser en base a usuario.id, no en base a ventas.id.

PD2: En los INNER JOIN se puede usar tanto WHERE como ON para emparejar las tablas, pero en los RIGHT/LEFT JOIN debes usar ON obligatoriamente.

Última edición por prueba230683; 07/11/2019 a las 13:12
  #3 (permalink)  
Antiguo 07/11/2019, 16:29
SLD
 
Fecha de Ingreso: diciembre-2013
Mensajes: 56
Antigüedad: 5 años, 10 meses
Puntos: 0
Respuesta: Cómo obtener en UN QUERY: "SELECT * FROM `t1_usuarios` y su {# de registro

Cita:
Iniciado por prueba230683 Ver Mensaje
en los RIGHT/LEFT JOIN debes usar ON obligatoriamente.
Gracias por tu ayuda



La zona horaria es GMT -6. Ahora son las 15:57.