Dois counts, tabelas diferentes, mesma query

3 respostas
cleiton_herrmann

Olá a todos, tenho tres tabelas no banco, produtos, produtostamanhos e pedidositens.
em ambas as tres tabelas existe o campo produto, chave primaria na tabela produtos e relacionamento das outras duas.
eu quero fazer um comando count(produtostamanhos.produto) e count(pedidositens.produto) agrupando por produtos.produto

o mais perto que cheguei disso foi

select p.produto, null, null from produtos as p union select p.produto, count(pt.produto) as conttamanhos, null from produtos as p inner join produtostamanhos as pt on p.produto = pt.produto group by p.produto union select p.produto, null, count(pi.produto) as contitens from produtos as p inner join pedidositens as pi on p.produto = pi.produto group by p.produto;
só que ele retorna 3 linhas pra cada produto como abaixo no exemplo do produto de código 4:
4 - 1 - null
4 - null - 9
4 - null - null

eu queria jogar td isso na mesma linha
4 - 1 - 9

já tentei o seguinte código também

select produtos.produto, count(produtostamanhos.produto), count(pedidositens.produto) from produtos, produtostamanhos, pedidositens where produtostamanhos.produto = produtos.produto and pedidositens.produto = produtos.produto group by produtos.produto, produtostamanhos.produto, pedidositens.produto;
só que este retorna em ambos os comandos count, o valor do count(pedidositens.produto), mas esse não está repetindo as linhas, no exemplo do produto citado acima, o resultado é o seguinte:
4 - 9 - 9

Alguem sabe o que esta faltando pra funcionar ???

3 Respostas

kdoigor
select produtos.produto, count(produtostamanhos.produto), count(pedidositens.produto)  
    from produtos, produtostamanhos, pedidositens  
    where produtostamanhos.produto = produtos.produto  
    and pedidositens.produto = produtos.produto  
    group by produtos.produto, count(produtostamanhos.produto), count(pedidositens.produto);
cleiton_herrmann

assim da erro na clause GROUP BY

só pra constar, eu uso o firebird

vlw ai, mais alguma ideia ?

cleiton_herrmann
resolvido
select
    produtos.produto,
    count(produtostamanhos.produto),

    (select
        count(pedidositens.produto)
        from pedidositens
        where (pedidositens.produto = produtos.produto)) as vendas

from produtos, produtostamanhos

where produtostamanhos.produto = produtos.produto    
group by produtos.produto;
Criado 17 de maio de 2010
Ultima resposta 17 de mai. de 2010
Respostas 3
Participantes 2