Encuentre detalles para la entrada de precio mínimo para cada grupo de filas con el mismo número de artículo

Leí mucho sobre esto, pero ninguno funcionó para mí. ¿Alguien puede ayudar?

Tengo una mesa grande con muchos artículos diferentes (muchos con el mismo EAN) y siempre necesito solo el más barato (ordenar por precio) con el AN correcto:

*art   price   an    ean
*Test |79,00|15770|0808736558136
*Test |85,00|k3238|0808736558136
*Test |68,00|r4850|0808736558136
*Test |65,00|a1117|0808736558136
*Test |78,00|t8619|0808736558136

Espera este:

*Test |65,00|a1117|0808736558136

preguntado el 22 de mayo de 12 a las 12:05

¿Quiere editar el encabezado de la pregunta? No se trata realmente de ordenar antes de agrupar, aunque entiendo por qué esperaba ese tipo de solución. -

Lo siento, no soy muy bueno para encontrar explicaciones en inglés para mi problema :-) -

Siempre es más fácil en retrospección. Gracias. -

2 Respuestas

SELECT B.*
  FROM BigTable AS B -- Why do SQL questions omit the table names so often?
  JOIN (SELECT EAN, MIN(Price) AS Price
          FROM BigTable
         GROUP BY EAN
       ) AS P
    ON B.EAN = P.EAN AND B.Price = P.Price
 ORDER BY B.EAN;

La subconsulta encuentra el precio mínimo para cada EAN; la consulta externa encuentra los detalles que coinciden con el EAN y el precio mínimo para ese EAN. Si hay dos registros con el mismo precio mínimo para un EAN determinado, se elegirán ambos.

contestado el 22 de mayo de 12 a las 12:05

Error de Mysql: la columna 'ean' en la cláusula de orden es ambigua - Thomas B

OK - desambiguar. No es tan difícil de hacer. :D Lo arreglaré. - jonathan leffler

Hola juntos ! Desde la actualización a mysql 5.1.69, la agrupación anterior ya no funciona. En BigTable tengo muchos EAN duplicados que no están agrupados, pero ¿por qué? *art price an ean *Test |79,00|15770|0808736558136 *Test |79,00|a1234|0808736558136 *Test |79,00|b1234|0808736558136 *Test |79,00|c1234|0808736558136 - Thomas B

SELECT * FROM myTable ORDER BY price ASC LIMIT 1

contestado el 22 de mayo de 12 a las 12:05

Eso funciona para el EAN único con el precio más bajo; pero no generaliza muy bien. Puede agregar una cláusula WHERE para especificar el único EAN que busca, pero ¿si busca muchos? - jonathan leffler

@JonathanLeffler: pero no ordenamos por EAN... así que si los ean son iguales, ¿dónde está el problema? Probablemente todavía estoy leyendo mal la pregunta: DonCalisto

Esto funcionará para los datos de muestra donde solo hay un EAN. En BigTable, habrá muchos EAN, pero su consulta aún devolverá solo una fila, en lugar de una fila por EAN distinto. - jonathan leffler

@JonathanLeffler: ok, ahora lo entiendo. La "salida esperada" me saca del camino porque no proporciona más de una fila... - DonCalisto

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.