Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #98702
    drigo
    Participante

      Olaa,

      Porque ao utilizarmos campos juntamente com Funcões de Agragação, esses campos devem OBRIGATORIAMENTE estar na clausula GROUP BY ? O que tecnicamente explica tal fato ?? Segue o código abaixo para melhor visualização:

      SELECT nome,telefone, COUNT(idade)
      FROM pessoas
      GROUP BY nome, telefone;

      PORQUE nome e telefone devem estar obrigatoriamente no GROUP BY ??

      Desde já, Agradeço.

      #98703
      leandrolbs
      Participante

        O count é para retornar uma unica linha, caso queira mais de uma linha esse resultado deve ser agrupado. Caso queira todas as linhas use assim:

        SELECT p.nome,p.telefone, (SELECT COUNT(idade) FROM pessoas) as QtdIdade
        FROM pessoas p

        #98706
        Rodrigo Mesquita
        Participante

          vai depender do seu objetivo

          Nesta consulta voce quer contar as idades por nome e telefone.

          As funções de agregação como count, sum, avg etc…trabalham em cima de uma massa de dados agrupados para obter um resultado, por isso a necessidade do agrupamento

          #98712
          fsitja
          Participante

            No SQL que você postou, você está contando quantas linhas por combinação de nome e telefone possuem idade com valor NOT NULL.

            Dá para fazer Count() sem group by, mas você quer contar o que exatamente? Quantas nomes e telefones distintos existem, mas sem agrupar (vai repetir o valor do count() para quem pertencer ao grupo)?

            Se for esse o caso resolva com funções de SQL analítico:

            SELECT nome,telefone, COUNT(idade) over (partition by nome, telefone)
            FROM pessoas

            SQL analítico faz apenas um scan nos dados, tendo mais performance do que subquery, que precisa ler a mesma tabela mais de uma vez (+ de um FROM com a mesma tabela).

            #98731
            drigo
            Participante

              Minha dúvida foi sanada…

              Muito obrigado pela atenção de todos.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.