MySQL Group由复杂的脚本组成

时间:2016-10-09 05:04:36

标签: mysql group-by

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

    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具有相同producto_id的多条记录 VisitaMaquina有这个:

| Producto_Id   | Visita_Id    | Total     |
|---------------|--------------|-----------|
|          1    |          31  |        8  |
|          1    |          31  |        13 |
|          2    |          31  |        9  |

同样的情况发生在名为reporteproducto的表中,其中多次重复producto_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   |

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

更好地将具有多个数据的子表与列外部组的相同组进行分组。在您的情况下,#hiddendocument.getElementById("HoverMe");应与$("#HoverMe").hover(function() {分组,因为它们所有都有重复的行与 ------------ --------- _ | #HoverMe | | #hidden |S| //hover #HoverMe to display #hidden ------------ | --------|R| | car.name|O| |---------|L| | car.name|L| ---------|B| | car.name|A| |---------|R| | car.name| | ---------|_| <div> <div id="HoverMe" style="width: 100px; background: green"> Car </div> <div id="hidden" style="overflow:auto; height:100px; position: absolute; background-color: red; display: none"> @foreach (var car in Model.Car) { @* Where the #hidden list get its content *@ <div>@car.Name</div> } </div> </div> 的相同组合。

您可以将 var hoverEle = document.getElementById("HoverMe"); var popupEle = document.getElementById("hidden"); var timeoutId; function showPopup() { var hoverRect = hoverEle.getBoundingClientRect(); // get the position of the hover element popupEle.style.left = (hoverRect.right + 16) + "px"; popupEle.style.top = hoverRect.top + "px"; popupEle.style.display = "block"; } function hidePopup() { popupEle.style.display = "none"; } hoverEle.addEventListener('mouseover', function () { showPopup(); }, false); hoverEle.addEventListener('mouseout', function () { timeoutId = window.setTimeout(function () { hidePopup(); }, 1500); }, false); popupEle.addEventListener('mouseover', function () { if (timeoutId) { window.clearTimeout(timeoutId); } }, false); popupEle.addEventListener('mouseout', function () { timeoutId = window.setTimeout(function () { hidePopup(); }, 1500); }, false); </script> SetStyle(ControlStyles.SupportsTransparentBackColor, True) Me.BackColor = Color.Transparent 表别名更改为以下子查询表单:

VisitaMaquina

此外,我发现你的where子句中有reporteproducto,这可能会导致你的问题。因为如果visita_id, producto_idvid=31 and pid=1的重复值都为visitamaquina vm,那么输出应该reporteproducto rp都加倍。在输出中(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 是正确的,这是奇数。

答案 1 :(得分:0)

我的错误

我得到了这个

$this->db->update();