2017-05-16 24 views
0

有人可以幫我找到錯誤在哪裏嗎?我試圖從多個表中統計一些行,並用'ven_codigo'對它們進行分組,但是我得到的是總數而不是每個表的計數。MySql - 與計數和組有問題

這些是我得到的結果。

計數propostas Counting propostas

計數pedidos Counting pedidos

計數propostas和pedidos Counting propostas and pedidos

select v.ven_codigo, 
     /*count(a.ven_codigo) as atividades_realizadas, v.ven_meta_atividades, 
     count(ha.usu_codigo) as historico_atividades, 
     count(c.cli_codigo) as clientes_cadastrados,*/ 
     count(p.ven_codigo) as propostas_realizadas, v.ven_meta_propostas, 
     count(pv.ven_codigo) as pedidos_realizados 
    from vendedor v 
    inner join comp_usuario_vendedor cuv on cuv.ven_codigo = v.ven_codigo 
    inner join usuario u on u.usu_codigo = cuv.usu_codigo 
    /*inner join atividade a on a.ven_codigo = v.ven_codigo 
    inner join historico_atividade ha on ha.usu_codigo = u.usu_codigo 
    inner join clientes c on c.ven_codigo = v.ven_codigo*/ 
    inner join proposta p on p.ven_codigo = v.ven_codigo 
    inner join pedido_venda pv on pv.ven_codigo = v.ven_codigo 

    where v.ven_codigo >= 1 and v.ven_codigo <= 3 
     /*and a.ati_data_emissao > '2016-01-01'*/ 
    group by v.ven_codigo, /*a.ven_codigo, ha.usu_codigo, c.cli_codigo,*/ 
p.ven_codigo, pv.ven_codigo; 

PS:我註釋掉部分的代碼,因爲我怎樣,我有些不對勁,運行整個查詢的時間過長。

+1

看看這是有幫助的.. [計數與內部連接錶行(https://dba.stackexchange.com/q/110850/124935) –

+0

你可以運行'explain'在這些查詢上查看連接的基數是非常高的,還是嘗試進行全面掃描? – 9000

+0

@DhruvSaxena它做到了。謝謝。我使用子查詢完成了所有的計數。 –

回答

0

@ DhruvSaxena的鏈接幫助我進入最終查詢,使用子查詢進行計數。結果如下。

select v.ven_codigo, 
    (select count(a.ven_codigo) 
     from atividade a 
     where a.ven_codigo = v.ven_codigo 
      and a.ati_data_emissao > '2016-01-01' 
     group by a.ven_codigo) as atividades_realizadas, v.ven_meta_atividades, 

     (select count(ha.usu_codigo) 
     from historico_atividade ha 
     inner join usuario u on u.usu_codigo = ha.usu_codigo 
     inner join comp_usuario_vendedor cuv on cuv.usu_codigo = u.usu_codigo 
     where cuv.ven_codigo = v.ven_codigo 
     group by v.ven_codigo) as historico_atividades, 

    (select count(c.cli_codigo) 
     from clientes c 
     where c.ven_codigo = v.ven_codigo 
     group by c.ven_codigo) as clientes_cadastrados, 

    (select count(p.ven_codigo) 
     from proposta p 
     where p.ven_codigo = v.ven_codigo 
     group by p.ven_codigo) as propostas_realizadas, v.ven_meta_propostas, 

    (select count(pv.ven_codigo) 
     from pedido_venda pv 
     where pv.ven_codigo = v.ven_codigo 
     group by pv.ven_codigo) as pedidos_realizados 

from vendedor v 
where v.ven_codigo >= 1 and v.ven_codigo <= 3 
group by v.ven_codigo; 

enter image description here