MySQL - AYUDA consulta avanzada URGENTE

 
Vista:
Imágen de perfil de Jose
Val: 10
Ha aumentado su posición en 8 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

AYUDA consulta avanzada URGENTE

Publicado por Jose (7 intervenciones) el 26/02/2017 20:17:23
Hola amigos, tengo un problema con una consulta que me está quitando el sueño.
Tengo que entregarla el miercoles 1 a ver si me podéis echar una mano.


Esto es lo que me piden:

Consulta que obtenga el artículo por centro comercial con el precio más bajo


Esta es mi Consulta:

1
2
3
4
5
6
7
8
9
10
11
12
SELECT c.id_cc,c.nombre,d.id_art,d.descrip,MIN(a.precio)
FROM ccomercial c
INNER JOIN articulos a
ON c.id_cc=a.id_cc
INNER JOIN descart d
ON d.id_art=a.id_art
WHERE d.id_art IN(SELECT id_art
	FROM descart
	GROUP BY descrip) AND a.precio IN(SELECT MIN(precio)
	       	FROM articulos
		GROUP BY id_art)
GROUP BY 1;


Mi problema surge cuando el resultado de mi consulta sale al final con A2 y Articulo 2. No se que hacer para que salga A8 y Artículo8.

Me podéis ayudar?? la foto de ejemplo es la que nos ha puesto nuestro profesor. A lo mejor está mal aposta pero no lo sé. Gracias.

Dejo las dos fotos, la del profesor y la de mi consulta y el fichero de la BD de la consulta. GRACIAS DE ANTEMANO

ej
ej2
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 kip
Val: 98
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

AYUDA consulta avanzada URGENTE

Publicado por kip (30 intervenciones) el 26/02/2017 22:24:17
Hola, el problema que tienes es que te basas en id_art al momento de hacer el MIN() en el conjunto de resultados del WHERE IN() de a.precio , yo hice este codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
	art.id_cc,
	cc.nombre,
	dart.id_art,
	dart.descrip,
	x.precio
FROM
	articulos AS art
INNER JOIN (
	SELECT
		id_cc,
		MIN(precio) AS precio
	FROM
		articulos
	GROUP BY
		id_cc
) x ON x.id_cc = art.id_cc
AND x.precio = art.precio
INNER JOIN descart dart ON dart.id_art = art.id_art
INNER JOIN ccomercial cc ON cc.id_cc = x.id_cc;

Me base directamente en id_cc y el precio para tomar el precio minimo por centro comercial y lo coloque dentro de un INNER JOIN para poder obtener el id_art correspondiente y no ser dependiente de este conjunto de resultados.

Ahora bien modifique tambien tu codigo, solo hice dos cambios los cuales resaltare:

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
SELECT
	c.id_cc,
	c.nombre,
	d.id_art,
	d.descrip,
	a.precio #No es neceserio el MIN de nuevo..
FROM
	ccomercial c
INNER JOIN articulos a ON c.id_cc = a.id_cc
INNER JOIN descart d ON d.id_art = a.id_art
WHERE
	d.id_art IN (
		SELECT
			id_art
		FROM
			descart
		GROUP BY
			descrip
	)
AND a.precio IN (
	SELECT
		MIN(precio)
	FROM
		articulos
	GROUP BY
		id_cc #Me baso en el i_cc, ya que es el menor precio en cada centro comercial
);

Prueba con los dos y nos cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Jose
Val: 10
Ha aumentado su posición en 8 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

AYUDA consulta avanzada URGENTE

Publicado por Jose (7 intervenciones) el 26/02/2017 23:42:58
GRACIAS!!!!!!!!!!!! La verdad que si que era una tontería pero no había c.....s a conseguirlo, ahora veo el pq de ello.
MIL GRACIAS KIP DE VERDAD!!!!
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