MySQL - Contar registros

 
Vista:
sin imagen de perfil
Val: 20
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Contar registros

Publicado por Veronica (9 intervenciones) el 24/04/2018 21:12:50
Hola a todosss!. Les platico un poco lo que me pasa espero me puedan ayudar..

Tengo dos tablas:

productos
id_producto nombre
1 -------------- primer producto
2 -------------- segundo producto

presentaciones
id_presentacion id_producto medida
1 --------------------- 1 ---------------- 50 cm
2 --------------------- 1 ---------------- 60 cm

lo que quiero que me cuente es cuantos productos tienen al menos una presentacion

realize esta consulta pero me cuenta las presentaciones que tienen el id 1 y yo no quiero eso
SELECT p.nombre, count(p.id_producto) as cantidad FROM productos AS p LEFT JOIN presentaciones AS pre ON p.id_producto=pre.id_producto WHERE p.id_producto=1;

AGRADEZCO MUCHO SU AYUDA!
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Contar registros

Publicado por leonardo_josue (414 intervenciones) el 24/04/2018 22:09:54
Hola Verónica:

Estás muy cerca de la solución, sólo que hay dos problemas con tu consulta, primero, no estás agrupando por producto sino que estás filtrando en el WHERE y segundo, Estás contando los productos, no las presentaciones... en otras palabras, la consulta debería quedar más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
mysql> SELECT * FROM productos;
+-------------+------------------+
| id_producto | nombre           |
+-------------+------------------+
|           1 | primer producto  |
|           2 | segundo producto |
+-------------+------------------+
2 rows in set (0.00 sec)
 
mysql> SELECT * FROM presentaciones;
+-----------------+-------------+--------+
| id_presentacion | id_producto | medida |
+-----------------+-------------+--------+
|               1 |           1 | 50 cm  |
|               2 |           1 | 60 cm  |
+-----------------+-------------+--------+
2 rows in set (0.05 sec)
 
mysql> SELECT
    ->   T1.id_producto,
    ->   T1.nombre,
    ->   COUNT(T2.id_presentacion) total_presentaciones
    -> FROM productos T1
    -> LEFT JOIN presentaciones T2 ON T1.id_producto = T2.id_producto
    -> GROUP BY T1.id_producto, T1.nombre;
+-------------+------------------+----------------------+
| id_producto | nombre           | total_presentaciones |
+-------------+------------------+----------------------+
|           1 | primer producto  |                    2 |
|           2 | segundo producto |                    0 |
+-------------+------------------+----------------------+
2 rows in set (0.00 sec)

Observa que el COUNT lo haces sobre la tabla T2 que corresponde a las presentaciones (en tu caso usas el alias pre). Si quieres filtrar sólo aquellos productos que tengan 1 o más presentaciones, entonces agregas al final una cláusula HAVING:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT
    ->   T1.id_producto,
    ->   T1.nombre,
    ->   COUNT(T2.id_presentacion) total_presentaciones
    -> FROM productos T1
    -> LEFT JOIN presentaciones T2 ON T1.id_producto = T2.id_producto
    -> GROUP BY T1.id_producto, T1.nombre
    -> HAVING COUNT(T2.id_presentacion) >= 1;
+-------------+-----------------+----------------------+
| id_producto | nombre          | total_presentaciones |
+-------------+-----------------+----------------------+
|           1 | primer producto |                    2 |
+-------------+-----------------+----------------------+
1 row in set (0.00 sec)

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 20
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Contar registros

Publicado por Veronica (9 intervenciones) el 24/04/2018 23:28:37
Muchisimas gracias leo por tu respuesta.. :)

Pero lo que yo quisiera saber es la cantidad de productos que tienen al menos una presentacion.

En el ejemplo que proporcione tengo dos productos, el cual solo uno de ellos tiene presentaciones.

Entonces el resultado que quisiera obtener es:

-----------------------------------------------------------------------
total_productos_con_una_o_mas_presentaciones
-----------------------------------------------------------------------
1
----------------------------------------------------------------------

Espero haberme explicado mejor..
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Contar registros

Publicado por leonardo_josue (414 intervenciones) el 26/04/2018 15:46:42
Hola de nuevo Verónica:

En ese caso, la consulta se simplifica bastante, lo único que tienes que hacer es contar cuantos productos distintos hay en tu tabla de presentaciones:

1
2
3
4
5
6
7
8
9
mysql> SELECT
    ->   COUNT(DISTINCT id_producto) total_productos_con_una_o_mas_presentaciones
    -> FROM presentaciones;
+----------------------------------------------+
| total_productos_con_una_o_mas_presentaciones |
+----------------------------------------------+
|                                            1 |
+----------------------------------------------+
1 row in set (0.00 sec)

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 20
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Contar registros

Publicado por Veronica (9 intervenciones) el 26/04/2018 22:15:44
Chispas!! Algo Tan sencillo me estaba complicando la vida!

Te agradezco muchisimo tu ayuda Leo. Era todo lo que necesitaba!

Saludos..
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