【问题标题】:MySql - Having issues with count and group byMySql - 计数和分组问题
【发布时间】:2017-05-16 15:04:43
【问题描述】:

谁能帮我找出错误在哪里?我正在尝试计算多个表中的一些行并将它们按“ven_codigo”分组,但我得到的是总计数而不是每个表的计数。

这些是我得到的结果。

计算建议

计数pedidos

计算 propostas 和 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:我注释掉了部分代码,因为我错了,运行整个查询花费的时间太长了。

【问题讨论】:

  • 看看这是否有帮助..Count rows with inner joined tables
  • 您能否对这些查询运行 explain 并查看连接的基数非常高的地方,或者尝试进行全面扫描?
  • @DhruvSaxena 它做到了。谢谢。我使用子查询完成了所有计数。
  • 我没有看到推荐的子查询,也没有看到EXPLAINs。 (还)
  • @RickJames 哎呀,对不起。当我发表评论时,我没有使用装有 mysql 的电脑。我只是无法获得 EXPLAIN 来给我那些漂亮的表格,所以这就是我发布查询的原因。

标签: mysql sql count group-by inner-join


【解决方案1】:

@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;

【讨论】:

    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2012-01-28
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多