MySQL - Consulta con varias tablas

 
Vista:

Consulta con varias tablas

Publicado por leomal (1 intervención) el 28/10/2017 05:47:44
Hola buen dia. podrian ayudarme a realizar la siguiente consulta involucrando a 3 tablas
1) Vendedor (id_Vendedor, Nombre)
2) Prospecto (id_prospecto, Nombre, id_vendedor, Mes)
3) Cliente (id_Cliente, Nombre, id_Vendedor, Mes)

Necesito hacer una consulta donde me muestre los nombres de los vendedores y me contabilice cuantos Prospectos y Clientes tiene cada vendedor en el mes de Enero, ejemplo:

Vendedores | Prospectos | Clientes
Adrian | 0 | 2
Carlos | 2 | 2

solo pude hacer la consulta entre las tablas Vendedor y Prospectoy funciona bien pero no se como incluir la tabla Cliente, utilice el siguiente codigo:
SELECT vendedor.nombre, COUNT(prospecto.id_vendedor) Prospectos FROM vendedor INNER JOIN prospecto ON prospecto.id_vendedor = vendedor.id WHERE Mes = 'Enero' GROUP BY vendedor.id

Agradezco de antemano la 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: 250
Plata
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta con varias tablas

Publicado por leonardo_josue (414 intervenciones) el 01/11/2017 15:55:11
Hola leomal:

Tienes muchas formas de hacer esto, una de las más simples (aunque no la mejor) es utilizar subconsultas. El problema principal es que tienes dos relaciones 1 a muchos y al querer "juntarlas" se convierte en una relación muchos a muchos. El "truco" está en cambiar estas relaciones en 1 a 1... sería 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
mysql> SELECT * FROM vendedores;
+-------------+-----------------+
| id_vendedor | nombre_vendedor |
+-------------+-----------------+
|           1 | vendedor uno    |
|           2 | vendedor dos    |
|           3 | vendedor tres   |
+-------------+-----------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM clientes;
+------------+-------------+----------------+-------+
| id_cliente | id_vendedor | nombre_cliente | mes   |
+------------+-------------+----------------+-------+
|          1 |           1 | cliente uno    | enero |
|          2 |           1 | cliente dos    | enero |
|          3 |           1 | cliente tres   | enero |
|          4 |           2 | cliente cuatro | enero |
|          5 |           2 | cliente cinco  | enero |
|          6 |           2 | cliente seis   | enero |
|          7 |           3 | cliente siete  | enero |
+------------+-------------+----------------+-------+
7 rows in set (0.00 sec)
 
mysql> SELECT * FROM prospectos;
+--------------+-------------+------------------+-------+
| id_prospecto | id_vendedor | nombre_prospecto | mes   |
+--------------+-------------+------------------+-------+
|            1 |           1 | prospecto uno    | enero |
|            2 |           1 | prospecto dos    | enero |
|            3 |           1 | prospecto tres   | enero |
|            4 |           1 | prospecto cuatro | enero |
|            5 |           2 | prospecto cinco  | enero |
|            6 |           3 | prospecto seis   | enero |
|            7 |           3 | prospecto siete  | enero |
+--------------+-------------+------------------+-------+
7 rows in set (0.00 sec)
 
mysql> SELECT
    ->   id_vendedor, nombre_vendedor,
    ->   ( SELECT COUNT(id_prospecto)
    ->     FROM prospectos
    ->     WHERE
    ->     prospectos.id_vendedor = vendedores.id_vendedor
    ->   ) total_prospectos,
    ->   ( SELECT COUNT(id_cliente)
    ->     FROM clientes
    ->     WHERE
    ->     clientes.id_vendedor = vendedores.id_vendedor
    ->   ) total_prospectos
    -> FROM vendedores;
+-------------+-----------------+------------------+------------------+
| id_vendedor | nombre_vendedor | total_prospectos | total_prospectos |
+-------------+-----------------+------------------+------------------+
|           1 | vendedor uno    |                4 |                3 |
|           2 | vendedor dos    |                1 |                3 |
|           3 | vendedor tres   |                2 |                1 |
+-------------+-----------------+------------------+------------------+
3 rows in set (0.00 sec)

En otras palabras, cada subconsulta obtiene de manera única el total de prospectos y/o clientes, sin "mezclar" ambas tablas. El inconveniente de este tipo de consultas es que pueden ser muy lentas si tienes muchos registros.

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