Según mi investigación, este es un problema muy común que generalmente tiene una solución bastante simple. Mi tarea es modificar varias consultas de obtener todos los resultados en obtener los primeros 3 por grupo. Al principio, esto iba bien y utilicé varias recomendaciones y respuestas de este sitio para lograr esto (Productos más vistos). Sin embargo, estoy teniendo problemas con mi último "Producto más vendido" debido a las combinaciones múltiples.N superior por grupo con varias combinaciones de tabla
Básicamente, necesito obtener todos los productos en orden por # ventas más altas por producto en el que el máximo de productos por proveedor es 3 Tengo varias tablas unidas para crear la consulta original, y cada vez que intento para usar las variables para generar clasificaciones produce resultados no válidos. Lo siguiente debe ayudar a comprender mejor el tema (He quitado los campos innecesarios por razones de brevedad):
Tabla Producto
productid | vendorid | approved | active | deleted
vendedor Tabla
vendorid | approved | active | deleted
orden de la tabla
orderid | `status` | deleted
Ordene los artículos Tabla
orderitemid | orderid | productid | price
Ahora, mi búsqueda original a obtener todos los resultados es el siguiente:
SELECT COUNT(oi.price) AS `NumSales`,
p.productid,
p.vendorid
FROM products p
INNER JOIN vendors v ON (p.vendorid = v.vendorid)
INNER JOIN orders_items oi ON (p.productid = oi.productid)
INNER JOIN orders o ON (oi.orderid = o.orderid)
WHERE (p.Approved = 1 AND p.Active = 1 AND p.Deleted = 0)
AND (v.Approved = 1 AND v.Active = 1 AND v.Deleted = 0)
AND o.`Status` = 'SETTLED'
AND o.Deleted = 0
GROUP BY oi.productid
ORDER BY COUNT(oi.price) DESC
LIMIT 100;
Por último, (y aquí es donde estoy confundido), estoy tratando de alterar la afirmación anterior de que tales Recibí solo los 3 mejores productos (por # vendidos) por proveedor. Agregaría lo que tengo hasta ahora, pero estoy avergonzado de hacerlo y esta pregunta ya es un muro de texto. Probé las variables pero sigo obteniendo resultados no válidos. Cualquier ayuda sería muy apreciada.
Eso es brillante Richard, gracias! La declaración CROSS JOIN fue el elemento clave que me faltaba en mi intento. Esa es una consulta extremadamente útil, en mi opinión, y una que planeo usar bastante. – Jeremy
@jcargilo - FYI He arreglado el orden interno por. ¡Debe ser vendorid + NumSales solamente! – RichardTheKiwi
¡Excelente, gracias! – Jeremy