2016-10-09 3 views
1

У меня есть сценарий, который работает идеально, но нужно добавить значения из другой таблицы текущего скриптаMySQL Группы по сложному сценарию

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 | 

Любая идея о том, как решить эту проблему?

ответ

1

Лучше группа таблица к югу, который имеет несколько данных с одной и той же группой вашей внешней группы по columns.In вашего случая должны быть VisitaMaquina и reporteproducto группы по с visita_id, producto_id, так как все они имеют повторяющиеся строки с теми же комбинациями vid=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 

Кроме того, я обнаружил, что есть в вашем где положение, может быть, это вызывает ваш problem.because vm.maquina_id если visitamaquina и reporteproducto оба имеют значения повторения visita_id, producto_id, тогда выход должен иметь Total, Quantity и удвоены. В вашем выводе Quantity прав, это странно.

+0

Это хороший вариант, только что visitamaquina и reporteproducto имеют более чем 1.000.000 записей, и мне нужно, чтобы добавить фильтр, основанный на другой таблице –

+0

@GerardoAbdo еще не могу понять, почему 'total' удваивается и' количество' является правильным. – amow

+0

Я использовал ваш предложенный сценарий и, кажется, лучший вариант с этого момента. большое спасибо –

0

Моя ошибка

Я получил это

|Producto_Id | Visita_Id | Total  |Quantity | count(id) 
|---------------|--------------|-----------|-----------|-----------| 
|   1 |   31 |  42 |  22 |  4  | 
|   2 |   31 |  45 |  36 |  6  | 
|   3 |   31 |  36 |  88 |  4  | 
Смежные вопросы