2017-05-16 8 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

関連する問題