MySQL - Consulta compleja y problema con only_full_group

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

Consulta compleja y problema con only_full_group

Publicado por Nkm (2 intervenciones) el 26/05/2019 23:21:02
Buenas.

Me estoy volviendo literalmente loco para conseguir sacar los resultados de esta consulta, ya que cada vez que parece que lo consigo me acaba saltando el "incompatible with sql_mode=only_full_group_by". Si alguien me puede echar una manita o al menos guiarme un poco, lo agradecería. Adjunto el .sql si alguien quiere probarlo.

Tengo esta tabla:

CREATE TABLE `precios` (
`id` mediumint(8) UNSIGNED NOT NULL,
`ean` bigint(13) UNSIGNED ZEROFILL NOT NULL,
`id_proveedor` tinyint(3) UNSIGNED NOT NULL,
`cantidad` smallint(5) UNSIGNED NOT NULL,
`precio` decimal(9,2) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Y estos registros:

INSERT INTO `precios` (`id`, `ean`, `id_proveedor`, `cantidad`, `precio`) VALUES
(1, 1111111111111, 102, 1, '7.82'),
(2, 1111111111111, 102, 3, '7.56'),
(3, 1111111111111, 102, 12, '7.56'),
(4, 1111111111111, 102, 24, '7.56'),
(5, 1111111111111, 102, 36, '7.56'),
(6, 1111111111111, 103, 1, '8.39'),
(7, 1111111111111, 103, 3, '8.24'),
(8, 1111111111111, 103, 12, '8.12'),
(9, 1111111111111, 103, 24, '8.12'),
(10, 1111111111111, 103, 36, '8.12'),
(11, 2222222222222, 102, 1, '6.86'),
(12, 3333333333333, 102, 3, '6.60'),
(13, 4444444444444, 102, 12, '6.45'),
(14, 5555555555555, 102, 24, '6.05'),
(15, 6666666666666, 102, 36, '5.80');

Lo que necesito es:
El precio mínimo por proveedor, y el mínimo de cantidad, para aquellos productos con al menos dos proveedores

Ejemplo:
- El producto 1111111111111 que está en las 10 primeras filas tiene dos proveedores (102 y 103).
- Por lo tanto, necesito que me devuelva el EAN y, para cada uno de estos dos proveedores, también el precio mínimo y a qué cantidad corresponde
- Básicamente, tiene que devolver las filas 2 y 8 (que contienen para cada EAN el precio mínimo a menor cantidad)
-- A partir de la fila 11 no tiene que devolver nada porque no hay ningún EAN con al menos dos proveedores
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: 3
Ha aumentado su posición en 36 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta compleja y problema con only_full_group

Publicado por Nkm (2 intervenciones) el 29/05/2019 15:34:00
Bueno, algo he conseguido avanzar en esto...

Mediante tres consultas consecutivas voy poco a poco llegando al resultado, pero evidentemente está INFRA-optimizado.

1
2
3
SELECT ean,COUNT(DISTINCT id_proveedor) proveedores FROM precios GROUP BY ean HAVING COUNT(DISTINCT id_proveedor)>1
SELECT ean,id_proveedor,MIN(precio) precio FROM precios WHERE ean = [EAN_OBTENIDO_ANTES] GROUP BY id_proveedor
SELECT MIN(cantidad) cantidad FROM precios WHERE ean = [EAN_OBTENIDO_ANTES] AND precio = [PRECIO_OBTENIDO_ANTES] LIMIT 1

Si alguien tiene alguna idea para optimizarlo, lo agradecería, porque cuando yo lo intento me empieza a arrojar errores con el only_full_group o no me da los resultados como debe...

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