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.