1
resposta

Inner join

Não consigo extrair resulatdo utilizando "group by", quando eu rodo o script sem group by os resultados são projetados.

select distinct a.cpf , a.nome, to_char(b.data_venda,'yyyy') as ano, c.nome as Vendedor, c.matricula,
d.codigo_do_produto, e.nome_do_produto
from tabela_de_clientes  A
inner join notas_fiscais  B on (a.cpf = b.cpf)
inner join tabela_de_vendedores  C on (c.matricula = b.matricula)
inner join itens_notas_fiscais  D on (d.numero = b.numero)
inner join tabela_de_produtos  E  on (e.codigo_do_produto = d.codigo_do_produto)
group by to_char(b.data_venda,'yyyy')
1 resposta

Olá Luiz, tudo bem?

O GROUP BY é utilizado normalmente com funções de agregação, como AVG(), COUNT(), MAX(), MIN() e SUM(), e os mesmo campos que são utilizados no SELECT precisam também serem passados no GROUP BY, dessa forma:

SELECT  COUNT(*), B.NOME, A.MATRICULA FROM NOTAS_FISCAIS A
INNER JOIN TABELA_DE_VENDEDORES B
ON A.MATRICULA = B.MATRICULA
GROUP BY  A.MATRICULA, B.NOME;

Então a forma correta de utilizar o GROU BY na sua query seria:

select distinct a.cpf , a.nome, to_char(b.data_venda,'yyyy') as ano, c.nome as Vendedor, c.matricula, d.codigo_do_produto, e.nome_do_produto
from tabela_de_clientes  A
inner join notas_fiscais  B on (a.cpf = b.cpf)
inner join tabela_de_vendedores  C on (c.matricula = b.matricula)
inner join itens_notas_fiscais  D on (d.numero = b.numero)
inner join tabela_de_produtos  E  on (e.codigo_do_produto = d.codigo_do_produto)
group by  a.cpf , a.nome, to_char(b.data_venda,'yyyy'), c.nome , c.matricula, d.codigo_do_produto, e.nome_do_produto;

Mas já no caso da sua query não é necessário a utilização do GROU BY, pois como não tem uma função de agregação, o retorno da query será o mesmo.

Espero ter ajudado e bons estudos!