我有一个完美的脚本,但是需要从另一个表中添加值
当前脚本是

    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   |

你知道怎么解决这个问题吗?

最佳答案

最好将具有多个数据的子表与外部组的同一组按列分组。在您的情况下,VisitaMaquinareporteproducto应与visita_id, producto_id分组,因为它们都具有具有相同组合的重复行。
您可以将vid=31 and pid=1visitamaquina 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_idvisitamaquina都有重复值reporteproducto,那么输出应该都是visita_id, producto_id的两倍,在你的输出中Total, Quantity是对的,这很奇怪。

关于mysql - MySQL Group按复杂脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39940210/

10-14 23:49