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

Quais campos de linha são retornados ao agrupar com MySQL?


Qual ​​ID será retornada ( 1, 2 ou 3 )?

R:O servidor escolherá para todos os registros que tenham o mesmo nome o id que ele deseja (provavelmente o mais rápido para buscar, o que é imprevisível). Para citar a documentação oficial:

Muito mais informações neste link .

Qual ​​id esta consulta está indo para ORDER BY ( Igual ao retornado? ... veja a pergunta 1 )?

Não faz sentido descobrir em que ordem os dados recuperados serão retornados, pois você não pode prever o resultado que obterá. No entanto, é muito provável que você obtenha o resultado classificado pela coluna de ID imprevisível.

Você pode controlar qual ID é retornado/usado para pedidos? por exemplo. Retorne o maior id ou o primeiro id de um GRUPO.

Você deve estar assumindo neste momento que você não pode. Leia novamente a documentação.

Tornando as coisas ainda mais claras:você não pode prever o resultado de uma cláusula GROUP BY usada incorretamente. O principal problema com o MySQL é que ele permite que você o use de maneira não padrão, mas você precisa saber como usar esse recurso. O ponto principal por trás disso é agrupar por campos que você sabe que sempre serão os mesmos. POR EXEMPLO:
SELECT id, name, COUNT( * ) AS frequency
FROM table
GROUP BY id

Aqui, você conhece name será único como id determina funcionalmente name . Portanto, o resultado que você conhece é válido. Se você agrupar também por nome, esta consulta seria mais padrão, mas terá um desempenho um pouco pior no MySQL.

Como nota final, leve em consideração que, na minha experiência, os resultados nessas consultas não padrão para os campos selecionados e não agrupados são geralmente os que você obteria aplicando um GROUP BY e, em seguida, um ORDER BY naquele campo. É por isso que tantas vezes parece trabalhar. No entanto, se você continuar testando, acabará descobrindo que isso acontece 95% das vezes. E você não pode confiar nesse número.