我有一个完美的脚本,但是需要从另一个表中添加值
当前脚本是
select v.id, vm.producto_id, sum(vm.total), count(v.id)
from visita v, reporte r, visitamaquina vm, maquina m,
(select r.id, empleado_id, fecha, cliente_id from ruta r, rutacliente rc where r.id=rc.ruta_id and
fecha>='2016-10-01' and fecha<='2016-10-30' group by fecha, cliente_id, empleado_id) as rem
where rem.fecha=v.fecha and v.cliente_Id=rem.cliente_id and r.visita_id=v.id and vm.visita_id=v.id and m.id=vm.maquina_id
group by vm.visita_id, vm.producto_id
当前脚本返回这个(我需要一些额外的列,但为此目的,我只留下有问题的列):
| Producto_Id | Id | Total | count(id) |
|---------------|--------------|-----------|-----------|
| 1 | 31 | 21 | 2 |
| 2 | 31 | 15 | 3 |
| 3 | 31 | 18 | 2 |
VisitaMaquina表对同一个产品id有多个记录
VisitaMaquina有:
| Producto_Id | Visita_Id | Total |
|---------------|--------------|-----------|
| 1 | 31 | 8 |
| 1 | 31 | 13 |
| 2 | 31 | 9 |
名为reporteproducto的表也会出现同样的情况,其中多次重复producto\u id。
表reporteproducto有
| Producto_Id | Visita_Id | Quantity |
|---------------|--------------|-----------|
| 1 | 31 | 4 |
| 1 | 31 | 7 |
| 2 | 31 | 5 |
我以前的查询工作得很好,我只需要得到数量的总和
我用了这个剧本
select v.id, vm.producto_id, sum(vm.total), sum(quantity), count(id)
from visita v, reporte r, visitamaquina vm, maquina m, reporteproducto rp,
(select r.id, empleado_id, fecha, cliente_id from ruta r, rutacliente rc where r.id=rc.ruta_id and
fecha>='2016-10-01' and fecha<='2016-10-30' group by fecha, cliente_id, empleado_id) as rem
where rem.fecha=v.fecha and v.cliente_Id=rem.cliente_id and r.visita_id=v.id and vm.visita_id=v.id and m.id=vm.maquina_id and rp.visita_Id=v.id and rp.producto_id=vm.producto_id
group by vm.visita_id, vm.producto_id
我知道了
|Producto_Id | Visita_Id | Total |Quantity | count(id)
|---------------|--------------|-----------|-----------|-----------|
| 1 | 31 | 42 | 11 | 4 |
| 2 | 31 | 45 | 18 | 6 |
| 3 | 31 | 36 | 44 | 4 |
期望的结果是(关注producto_id=1):
|Producto_Id | Visita_Id | Total |Quantity |
|---------------|--------------|-----------|-----------|
| 1 | 31 | 21 | 11 |
| 2 | 31 | 15 | 18 |
| 3 | 31 | 18 | 44 |
你知道怎么解决这个问题吗?
最佳答案
最好将具有多个数据的子表与外部组的同一组按列分组。在您的情况下,VisitaMaquina
和reporteproducto
应与visita_id, producto_id
分组,因为它们都具有具有相同组合的重复行。
您可以将vid=31 and pid=1
和visitamaquina vm
表别名更改为以下子查询表单:
(select visita_id, Producto_Id, sum(Total) as Total from visitamaquina
group by visita_id, Producto_Id) vm,
(select Producto_Id, Visita_Id, sum(Quantity) as Quantity from reporteproducto
group by Producto_Id, Visita_Id) rp
我还发现你的where子句中有
reporteproducto rp
,这可能会导致你的问题,因为如果vm.maquina_id
和visitamaquina
都有重复值reporteproducto
,那么输出应该都是visita_id, producto_id
的两倍,在你的输出中Total, Quantity
是对的,这很奇怪。关于mysql - MySQL Group按复杂脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39940210/