Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql:select max(score) não retorna os dados de linha relevantes


Você está usando MAX , que é uma função agregada. As funções agregadas têm o efeito de tratar várias linhas na tabela como um grupo. Se você não fizer nada de especial, todas as linhas da tabela inteira serão usadas como um grande grupo, e quando uma função agregada como MAX estiver lá, todas essas linhas serão condensadas em apenas uma linha agregada. Esse efeito de condensação teria ocorrido também para outras funções agregadas como MIN , SUM , GROUP_CONCAT e amigos (veja:http://dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). Você também pode aplicar agrupamentos específicos usando o GROUP BY construir, mas se você não fizer isso, a ocorrência da função agregada apenas agrupará todas as linhas em uma linha (mas esse agrupamento ocorre após a aplicação do WHERE condição, portanto, apenas as linhas filtradas são agregadas)

Agora, por causa desse efeito de condensação ou 'redução' das funções agregadas, deve haver alguma maneira de fazer um valor de muitos valores. Para MAX , dessa forma é listar apenas o valor máximo encontrado para todas as instâncias da expressão que você passou como argumento para MAX . Mas suas outras colunas não possuem essa função agregada. Para a maioria dos produtos de banco de dados, a ocorrência de colunas não agregadas e agregadas no SELECT lista seria um erro. Mas o MySQL se comporta de forma errada/diferente e retorna apenas um dos valores disponíveis para cada expressão não agregada listada no SELECT pedaço. Qual valor depende do mysql - você não pode confiar em nenhum algoritmo específico.

Em muitos casos, as pessoas querem fazer algo com "qualquer linha que tenha o valor máximo", ou seja, encontrar a linha que tem como valor o valor máximo, mas usar as outras colunas dessa linha não agregadas. A solução fornecida pelo middaparka faz isso, e há outras maneiras de conseguir isso também (google para MySQL no máximo em grupo). Para obter mais informações gerais sobre funções agregadas e o GROUP BY relacionado cláusula, você pode dar uma olhada em -shameless selfplug- meu artigo aqui:http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html