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

[SOLUCIONADO] Min combinado con Group By

Estas en el tema de Min combinado con Group By en el foro de Mysql en Foros del Web. Antes que nada una disculpa por la falta de ortografía, es combinado, pero ya no lo pude editar. Buen día, mi experiencia con SQL es ...
  #1 (permalink)  
Antiguo 08/02/2017, 16:00
 
Fecha de Ingreso: mayo-2004
Mensajes: 8
Antigüedad: 20 años, 6 meses
Puntos: 0
Min combinado con Group By

Antes que nada una disculpa por la falta de ortografía, es combinado, pero ya no lo pude editar.

Buen día, mi experiencia con SQL es en consultas básicas, me han solicitado una consulta que no puedo realizar y debido a mi limitado conocimiento no tengo idea que podría hacer.

Tengo una estructura de tablas de la siguiente forma:

d_cotizacion
--------------
id_Cotiza
id_Prod
Precio

e_cotizacion
--------------
id
fecha
id_Pvo
id_Lista

productos
-------------
codigo
nombre

proveedores
---------------
id
nombre

Me interesa generar una consulta que me de por cotización los productos cotizados con el menor precio, hice algo así:

Select *, Min(d_cotizacion.precio) As precioMinimo From d_cotizacion Inner Join e_cotizacion On d_cotizacion.id_Cotiza=e_cotizacion.id Where e_cotizacion.id_Lista=37 Group By d_cotizacion.id_Prod

Esta consulta me genera un resultado con el precio menor de cada producto pero al usar el agrupamiento solo quedan los del proveedor 3, los precios si son los mínimos, y necesito que el proveedor corresponda al que otorgo el menor precio, ¿cómo puedo hacer esta diferencia?

Gracias por su atención, saludos

Última edición por conetly; 08/02/2017 a las 16:08
  #2 (permalink)  
Antiguo 08/02/2017, 16:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Min convinado con Group By

No estaria mejor que el precio del producto este dentro de la tabla precios? porque lo tienes en la tabla cotizacion? Dependiendo la cotizacion es el precio del producto?

y con un query como este obtienes el precio minimo por producto por cotizacion:

Código MySQL:
Ver original
  1. select t1.id, min(t2.precio), t3.nombre from e_cotizacion as t1
  2. left join d_cotizacion as t2 on (t1.id=t2.id_cotiza)
  3. left join productos as t3 on (t2.id_prod=t3.codigo)
  4. group by t1.id, t3.nombre

si nada mas lo quieres por precio por cotizacion

Código MySQL:
Ver original
  1. select t1.id, min(t2.precio) from e_cotizacion as t1
  2. left join d_cotizacion as t2 on (t1.id=t2.id_cotiza)
  3. left join productos as t3 on (t2.id_prod=t3.codigo)
  4. group by t1.id
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 08/02/2017, 16:34
 
Fecha de Ingreso: mayo-2004
Mensajes: 8
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Min convinado con Group By

El precio esta en esa tabla, porque al sitio acceden varios proveedores controlados pro usuario y contraseña y cada uno coloca un precio a una lista de faltantes que se genera, al dueño le interesa saber de todas las cotizaciones los mejores precios
  #4 (permalink)  
Antiguo 08/02/2017, 16:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Min convinado con Group By

y el query funciono o no??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 08/02/2017, 16:58
 
Fecha de Ingreso: mayo-2004
Mensajes: 8
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Min convinado con Group By

El primero no, el segundo creo que da la información que necesito, jugare un poco con los campos, te adjunto el resultado como lo visualice.

Este es el resultado que me arroja mi consulta

id_Cotiza --- id_Prod --- precio --- id --- fecha --- id_Pvo --- id_Lista --- precioMinimo
5 --------- 606 -------- 2 --- --- 5 ----------------- 3 -------- 37 ------ 2
5 --------- 798 -------- 1 --- --- 5 ----------------- 3 -------- 37 ------ 1
5 --------- 014 -------- 3 --- --- 5 ----------------- 3 -------- 37 ------ 3
5 --------- 013 -------- 4 --- --- 5 ----------------- 3 -------- 37 ------ 3
5 --------- 037 -------- 5 --- --- 5 ----------------- 3 -------- 37 ------ 5

Lo que quiero hacer, es que el producto 013 el precio minimo es del proveedor 7, que en lugar de 3 en id_Pvo me de el 7, entonces en una lista mas extensa, tendría el id del proveedor que cotiza más barato
  #6 (permalink)  
Antiguo 12/02/2017, 01:35
 
Fecha de Ingreso: mayo-2004
Mensajes: 8
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Min combinado con Group By

Después de algunos días de estar probando y de en este mismo foro encontrar algo parecido, mi consulta queda así:

Código SQL:
Ver original
  1. SELECT d1.*,p.nombre AS prodNom, pv.nombre AS pvoNom
  2. FROM d_cotizacion AS d1
  3. INNER JOIN (SELECT d.id_Prod,MIN(d.precio) AS minPrecio FROM d_cotizacion AS d
  4. INNER JOIN e_cotizacion AS e ON d.id_Cotiza=e.id WHERE e.id_Lista=37 GROUP BY d.id_Prod) d2 ON d1.id_Prod=d2.id_Prod AND d1.precio=d2.minPrecio
  5. INNER JOIN productos AS p ON d1.id_Prod=p.codigo INNER JOIN e_cotizacion AS e1 ON d1.id_Cotiza=e1.id
  6. INNER JOIN proveedores AS pv ON e1.id_Pvo=pv.id

Esta me permite obtener el precio mínimo de todas las cotizaciones con el proveedor que lo ofrece

Última edición por gnzsoloyo; 12/02/2017 a las 07:58 Razón: Por favor, usar marcados disponibles para codigo.

Etiquetas: forma, group, min, productos, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




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