MySql - 计数和分组依据有问题
MySql - Having issues with count and group by
谁能帮我找出错误所在?我正在尝试计算多个 table 中的一些行并将它们按 'ven_codigo' 分组,但我得到的是总计数而不是每个 table.[=15= 的计数]
这些是我得到的结果。
计算邮票
计算足部
计算 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:我注释掉了部分代码,因为我哪里出了问题,运行 整个查询花费的时间太长了。
@DhruvSaxena 的 link 帮助我完成了这个最终查询,使用子查询进行计数。结果如下。
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;
谁能帮我找出错误所在?我正在尝试计算多个 table 中的一些行并将它们按 'ven_codigo' 分组,但我得到的是总计数而不是每个 table.[=15= 的计数]
这些是我得到的结果。
计算邮票
计算足部
计算 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:我注释掉了部分代码,因为我哪里出了问题,运行 整个查询花费的时间太长了。
@DhruvSaxena 的 link 帮助我完成了这个最终查询,使用子查询进行计数。结果如下。
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;