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

Consulta com GROUP BY e ORDER BY não funcionando quando várias colunas em SELECT são escolhidas


Você precisa ter cuidado ao usar GROUP BY . Depois de entender o que GROUP BY faz, você mesmo saberá o problema. Ele faz uma agregação em seus dados ou em outras palavras, reduz seus dados fazendo alguma operação nas entradas brutas e criando um novo número reduzido de entradas nas quais alguma função de agregação foi aplicada (SUM, COUNT, AVG, etc.)

Os campos que você fornece no GROUP BY cláusula representa o nível de agregação/roll-up que você está buscando.
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

Aqui você está tentando fazer a agregação em col1 nível, o que significa que para cada valor distinto presente na coluna col1 , haverá alguma operação feita em algumas outras colunas que você fornecer em SELECT cláusula(aqui col2 ,col3 ) para que na saída você tenha valores não repetidos em col1 e alguns valores acumulados de col2 e col3 contra cada col1 distinto valor com base em qual função você aplica (SUM, COUNT, AVG, etc.).

Como você aplica essa função? Isso é o que está faltando na sua consulta acima. Para resolvê-lo, você precisa aplicar alguma função de agregação nos campos que estão presentes no SELECT cláusula, mas não em GROUP BY cláusula. Tomando um exemplo de SUM, tente isto:
SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

OU para uma ideia melhor, removendo WHERE filtrar e verificar a saída executando:
SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1

Além disso, o motivo pelo qual sua outra consulta
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2

funcionou é porque você não precisa aplicar agregação ao campo (aqui col2 ) que está presente no GROUP BY cláusula.