Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) GROUP BY


GnRSlash

Pergunta

Gente,

Eu uso group by nas minhas consultas, mas to com dificuldade em entender a sintaxe.

Por exemplo:

Se eu fizer uma consulta do tipo:

Select Tipo, Sum(valores) as Total FROM Tabela1 Group by Tipo

Isso funciona de boa, e o resultado vai ser uma tabela com duas colunas (tipo e total daquele tipo)

Mas vamos supor que eu queira mais informações, por exemplo: quero saber não só o tipo e o total mas quero saber a loja, a data, o endereço

Daí eu achava que a consulta deveria ser:

Select Tipo, sum(valores) as total, loja, data, endereco FROM Tabela1 Group by Tipo

porém, a cláusula Group by não funciona e EXIGE que eu coloque TODOS os outros campos da minha consulta, ou seja, tenho que incluir a loja, data e endereço também e é justamente esta parte que eu não entendi, tipo, porque colocar tudo isso na cláusula e em que ordem vou colocar isso se eu não preciso agrupar por eles?

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

gnrslash, você ta agrupando sim pelos outros campos. se você não agrupar você tera q usar uma funcao de agregacao ou coisa do tipo.

um exemplo, imagine q na tabela você tenha isso aqui:

Tipo | Valores | Loja
-----------------------------
1    |   10,00 | A
1    |   20,00 | A
2    |   10,00 | A
2    |   10,00 | A
2    |   10,00 | B[/code] se você fizer isso aqui:
[code]Select Tipo, Sum(valores) as Total FROM Tabela1 Group by Tipo
o retorno sera:
Tipo | Total
-----------------------------
1    |   30,00
2    |   30,00[/code] certo?? agora imagine q você faca assim:
[code]Select Tipo, Sum(valores) as Total, Loja FROM Tabela1 Group by Tipo
se você não agrupa pela loja, pra onde tem q ir o A e o B?? o sql não vai saber o q fazer, por isso o erro: a query certa seria essa:
Select Tipo, Sum(valores) as Total, Loja FROM Tabela1 Group by Tipo, Loja
e retornaria:
Tipo | Valores | Loja
-----------------------------
1    |   30,00 | A
2    |   20,00 | A
2    |   10,00 | B[/code] entendeu?? os valores ficaram agrupados por Tipo e tb por Loja. se você não quer agrupar pela loja, ai é você q tem q definir o q acontece com o A e o B. você pode, por exemplo, selecionar a maior loja pra cada tipo com a funcao Max(). exemplo:
[code]Select Tipo, Sum(valores) as Total, Max(Loja) As Maior_Loja FROM Tabela1 Group by Tipo
o retorno seria:
Tipo | Valores | Maior_Loja
-----------------------------
1    |   30,00 | A
2    |   30,00 | B[/code]

veja ai se entendeu, qualquer coisa pergunte.

mas não poste mais na sala de tutoriais, beleza?? (a não ser q você esteja postando realmente um tutorial).

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

nossa, nem vi que tava no tópico errado, tava lendo um post e acabei clicando em new, foi mal

Sua explicação foi muito boa, eu entendi o motivo de todos os campos estarem na cláusula GROUP BY

fiz uns testes aqui e percebi que posso colocar campos no GROUP BY mesmo que eles não estejam no select.

De qualquer forma eu consegui fazer o relatório que tava querendo!

valeu mesmo!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...