3
respostas

O Count(*) só funciona com o GROUP BY?

No código SELECT CPF, COUNT(*) FROM [dbo].[NOTAS FISCAIS] dá erro.

Mas quando faço SELECT CPF, COUNT(*) FROM [dbo].[NOTAS FISCAIS] GROUP BY CPF funciona.

O primeiro código que deu erro aparece a seguinte mensage:

A coluna 'dbo.NOTAS FISCAIS.CPF' é inválida na lista de seleção porque não está contida em uma função de agregação nem na claúsula GROUP BY. Não sei por que diz como coluna o 'dbo.NOTAS FISCAIS.CPF' onde foi informado dbo.NOTAS FISCAIS como a tabela e nesta tabela foi acrescentado .CPF na mensagem de erro e disse que é uma coluna.

O que seria está função de agregação? É possível sem o GROUP BY neste código?

3 respostas

Olá Paulo, tudo bem?

O GROUP BY é a cláusula utilizada para agrupar os registros que estão sendo agregados, ou seja, ele determina como os registros serão retornados.

Utilizamos o GROUP BY quando estamos utilizando uma função de agregação(SUM, MAX, AVG, COUNT...), então precisamos especificar no GROUP BY por quais campos queremos realizar o agrupamento dos registros que estão sendo agregados. Porém, quando informamos determinados campos para serem selecionados, precisamos informar todos no GROUP BY, com exceção dos que estão fazendo parte da função de agregação.

Por este motivo, quando você executou a query sem a cláusula GROUP BY, um erro foi retornado, pois, como você está utilizando a função de agregação COUNT e está selecionando o campo CPF, então, é necessário informar o campo CPF na cláusula GROUP BY

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!
SELECT COUNT(*) FROM [dbo].[NOTAS FISCAIS]

SELECT CPF, COUNT(*) FROM [dbo].[NOTAS FISCAIS] GROUP BY CPF

Então no primeiro código acima retorna o total de todos CPFs, e o segundo código retorna o total por CPF?

Certo?

Isso mesmo Paulo.

  • O primeiro COUNT, realiza uma contagem de todas as linhas(registros) da tabela de notas fiscais:
SELECT COUNT(*) FROM [dbo].[NOTAS FISCAIS]
  • O segundo COUNT, também realiza uma contagem de todas as linhas(registros) da tabela de notas fiscais, porém, retorna o resultado por CPF
SELECT CPF, COUNT(*) FROM [dbo].[NOTAS FISCAIS] GROUP BY CPF

Espero ter ajudado e bons estudos!