2017-05-16 1 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; 

시 : 내가 뭔가 잘못이기 때문에 어떻게 코드의 일부를 주석 전체 쿼리를 실행하는 데 너무 오래 걸립니다.

+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