MySQL - Consulta con dos criterios

   
Vista:

Consulta con dos criterios

Publicado por Josue josue.rodriguez@mobusi.com (11 intervenciones) el 28/04/2015 17:12:00
Hola genios y amos del Mysql!! Cream de la cream y gente sabia y util para el mundo en el que vivimos donde las haya!

Tengo una duda, que debe ser sencillísima pero que así de primeras no consigo resolverla..

Imaginemos que tengo esta tabla:

SERVICIO PAIS CPM
Mobplus CO 3
Mobplus ES 2
Kimia CO 7
Kimia ES 1


Y quiero sacarme una lista de aquellos servicios donde, conjuntamente, el CPM de Colombia es menor que 4, y el CPM de España es menor que 3 (las dos condiciones a la vez)

Es decir, que de ese listado sólo me saldría Mobplus que es la única que cumpla esas dos condiciones conjuntas,

¿Cúal sería la query que debería hacer?

Me estoy debanando los sesos, pero no consigo sacarla...

Gracias genios!!
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
Imágen de perfil de Alberto

Consulta con dos criterios

Publicado por Alberto (26 intervenciones) el 28/04/2015 17:50:48
Hola...

Intenta...

1
SELECT * FROM tutabla WHERE CPMCO < 4 AND CPMES < 3;

Es lo único que podemos hacer ya que no proporcionas la estructura de tu tabla lo cual hace mas difícil ayudarte.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos. Suerte!
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

Consulta con dos criterios

Publicado por leonardo_josue (81 intervenciones) el 28/04/2015 23:21:57
Hola Josué:

Esta consulta es una de las más comunes en SQL, hay varias formas de resolverla, la más común es el uso del HAVING COUNT... por un lado, debes filtrar sólo aquellos registros que cumplan con las condiciones que necesitas, es decir, hacer algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT * FROM tabla;
+----------+------+------+
| SERVICIO | PAIS | CPM  |
+----------+------+------+
| Mobplus  | CO   |    3 |
| Mobplus  | ES   |    2 |
| Kimia    | CO   |    7 |
| Kimia    | ES   |    1 |
+----------+------+------+
4 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla
    -> WHERE (PAIS = 'CO' AND  CPM < 4) OR
    ->       (PAIS = 'ES' AND CPM < 3);
+----------+------+------+
| SERVICIO | PAIS | CPM  |
+----------+------+------+
| Mobplus  | CO   |    3 |
| Mobplus  | ES   |    2 |
| Kimia    | ES   |    1 |
+----------+------+------+
3 rows in set (0.00 sec)

El segundo paso es AGRUPAR por tu campo SERVICIO, para contar cuántos registros de los que filtraste, en este caso el servicio Mobplus CUMPLE CON LAS DOS CONDICIONES, mientras que Kimia SÓLO CUMPLE CON UNA...

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT servicio, COUNT(servicio) total
    -> FROM tabla
    -> WHERE (PAIS = 'CO' AND  CPM < 4) OR
    ->       (PAIS = 'ES' AND CPM < 3)
    -> GROUP BY servicio;
+----------+-------+
| servicio | total |
+----------+-------+
| Kimia    |     1 |
| Mobplus  |     2 |
+----------+-------+
2 rows in set (0.00 sec)

Finalmente, con el HAVING filtras aquellas que cumplan con el número de condiciones que necesitas:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT servicio
    -> FROM tabla
    -> WHERE (PAIS = 'CO' AND  CPM < 4) OR
    ->       (PAIS = 'ES' AND CPM < 3)
    -> GROUP BY servicio
    -> HAVING COUNT(servicio) = 2;
+----------+
| servicio |
+----------+
| Mobplus  |
+----------+
1 row in set (0.00 sec)


Dale un vistazo para ver si es lo que necesitas.

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
0
Comentar

Consulta con dos criterios

Publicado por Josue rodriguez (11 intervenciones) el 04/05/2015 12:24:16
Hola!!

Tiene buena pinta tío! Creo q es lo q necesito.

Desde que tenga internet en la ofi lo pruebo y te cuento

Muchisssimas gracias!!
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