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.