sql >> Base de Datos >  >> RDS >> Mysql

mysql:select max (puntuación) no devuelve los datos de fila relevantes

Estás usando MAX , que es una función agregada. Las funciones agregadas tienen el efecto de tratar varias filas de la tabla como un grupo. Si no hace nada especial, todas las filas de la tabla completa se usarán como un gran grupo, y cuando una función agregada como MAX está allí, todas estas filas se condensarán en una sola fila agregada. Ese efecto de condensación habría ocurrido también para otras funciones agregadas como MIN , SUM , GROUP_CONCAT y amigos (ver:http://dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). También puede aplicar agrupaciones específicas usando el GROUP BY construir, pero si no lo hace, la aparición de la función agregada simplemente agrupará todas las filas en una fila (pero esta agrupación ocurre después de aplicar WHERE condición, por lo que solo se agregan las filas filtradas)

Ahora, debido a este efecto de condensación o 'reducción' de las funciones agregadas, debe haber alguna forma de hacer un valor a partir de muchos valores. Para MAX , de esa manera es enumerar solo el valor máximo encontrado para todas las instancias de la expresión que pasó como argumento a MAX . Pero sus otras columnas no tienen esa función agregada. Para la mayoría de los productos de bases de datos, la aparición de columnas agregadas y no agregadas en el SELECT la lista sería un error. Pero MySQL se comporta de manera incorrecta/diferente y devuelve solo uno de los valores disponibles para cada expresión no agregada enumerada en SELECT poco. Qué valor depende de mysql; no puede confiar en ningún algoritmo en particular.

En muchos casos, la gente quiere hacer algo con "cualquier fila que tenga el valor máximo", en otras palabras, encontrar la fila que tiene como valor el valor máximo, pero usar las otras columnas de esa fila sin agregar. La solución proporcionada por middaparka hace eso, y también hay otras formas de lograrlo (google para MySQL grupo máximo). Para obtener más información general sobre las funciones agregadas y el GROUP BY relacionado cláusula, puede echar un vistazo a -shameless selfplug- mi artículo aquí:http://rpbouman.blogspot.com/2007/05/desacreditando-grupo-por-mitos.html