Duvida simples com group by

6 respostas
oitathi

Alguém sabe pq isso não funciona?

SELECT f.nome_usuario, e.nome_empresa, COUNT(f.id_usuario_pk)
FROM funcionario f
RIGHT JOIN empresa e
ON f.id_empresa_fk = e.id_empresa_pk
GROUP BY e.nome_empresa

Diz que não é uma cláusula group by válida…

6 Respostas

igor_ks

pq vc tem q colocar no group by todos os campos que nao estao usando o count, no caso f.nome_usuario e e.nome_empresa,

SELECT f.nome_usuario, e.nome_empresa, COUNT(f.id_usuario_pk) FROM funcionario f RIGHT JOIN empresa e ON f.id_empresa_fk = e.id_empresa_pk GROUP BY e.nome_empresa, f.nome_usuario

oitathi

Poxa, valeu!!!
Mas e se eu não quiser que mostre o count na minha pesquisa?
Eu li que pra vc usar o group by, vc tem usar, ou count, ou avg, ou sum…

J

Se não quiser calcular nada, não precisa de group by.
Se quiser colocar alguma condição no valor agregado utilize having.

Exemplo:

SELECT f.nome_usuario, e.nome_empresa, COUNT(f.id_usuario_pk)    
    FROM funcionario f    
    RIGHT JOIN empresa e    
    ON f.id_empresa_fk = e.id_empresa_pk    
    GROUP BY e.nome_empresa, f.nome_usuario   
    HAVING COUNT(f.id_usuario_pk) > 2
oitathi

AH TAH!! ENTENDI!!!
MUITO OBRIGADA!!!

E

uma coisa, se você não quiser calcular count, avg, etc… quando você agrupar, ele vai retornar “desduplicar” linhas que estariam duplicadas, teria o mesmo efeito do “distinct” na consulta.

Assim, isso:

SELECT f.nome_usuario, e.nome_empresa FROM funcionario f RIGHT JOIN empresa e ON f.id_empresa_fk = e.id_empresa_pk GROUP BY e.nome_empresa, f.nome_usuario
teria o mesmo resultado que

SELECT DISTINCT f.nome_usuario, e.nome_empresa FROM funcionario f RIGHT JOIN empresa e ON f.id_empresa_fk = e.id_empresa_pk(a segunda forma não é aceita em todos os SGBDs, o distinct em alguns SGBDs só aceita 1 campo)

J

Boa… nem lembrei deste detalhe!

Criado 18 de maio de 2012
Ultima resposta 18 de mai. de 2012
Respostas 6
Participantes 4