estou tentando mostrar a matricula, o valor total da comissão e o nome do funcionario no banco, mas ta dando esse erro,ja tentei tudo.
select matricula,sum(valor),prenome
from comissao , empregado
group by matricula
estou tentando mostrar a matricula, o valor total da comissão e o nome do funcionario no banco, mas ta dando esse erro,ja tentei tudo.
select matricula,sum(valor),prenome
from comissao , empregado
group by matricula
Isso acontece porque você possui algum campo com o mesmo nome nas duas tabelas e para resolver você pode “apelidar” as tabelas e “puxar” os campos pelos apelidos…
select b.matricula,sum(a.valor),b.prenome
from comissao as a, empregado as b
group by b.matricula,b.prenome
Se não quiser usar apelidos (alias), você pode usar o nome da tabela, geralmente o sql fica gigante…
select empregado.matricula,sum(comissao.valor),empregado.prenome
from comissao, empregado
group by empregado.matricula,empregado.prenome
Boa tarde, funciona dessa forma, porém a comissão que era pra dar o valor total de cada empregado, ficou igual para todos, o meu problema é que quero mostrar a matricula dos funcionários o valor total da comissão de cada funcionário e o nome deles.
obrigado pela ajuda
consegui!!! mudei a matricula para a matricula da tabela comissao e mostrou os valores da comissao total de cada empregado
select comissao.matricula,sum(comissao.valor),empregado.prenome
from comissao, empregado
group by comissao.matricula,empregado.prenome
Apenas cuidado com esse “consegui” sem entender os fundamentos…
Vamos ao próximo passo, você não usou um critério para comparar as duas tabelas, você citou o campo matricula na comissão, talvez ele seja o “elo” entre elas e do jeito que você fez não significa que a longo prazo algo dê errado na consulta, o ideal seria usar um where…
select comissao.matricula,sum(comissao.valor),empregado.prenome
from comissao, empregado
where comissao.matricula = empregado.marticula
group by comissao.matricula,empregado.prenome
Pegou a lógica da coisa? Não basta apenas juntar as tabelas, isso não define relacionamentos entre elas é preciso “vinculá-las”, aliás o ideal e mais legível na minha opinião seria usar joins…
select comissao.matricula, sum(comissao.valor), empregado.prenome
from comissao
inner join empregado on comissao.matricula = empregado.marticula
group by comissao.matricula,empregado.prenome
Esse on junto ao inner join cria esse vínculo, dessa forma o que não entrar na condição nem será exibido na consulta e você pode usar o where para outros critérios como funcionários que comecem com a letra ‘A’ por exemplo…
select comissao.matricula, sum(comissao.valor), empregado.prenome
from comissao
inner join empregado on comissao.matricula = empregado.marticula
where empregado.nome like 'A%'
group by comissao.matricula,empregado.prenome
Ou empregados acima de 18 anos…
select comissao.matricula, sum(comissao.valor), empregado.prenome
from comissao
inner join empregado on comissao.matricula = empregado.marticula
where empregado.idade > 18
group by comissao.matricula,empregado.prenome
Ou seja, seria um “refinamento” do que o vincúlo pelo join trouxe na consulta…
Vai treinando, é assim que se aprende, bons estudos!
entendi agora, obrigado