sql >> Base de Datos >  >> RDS >> Mysql

Mysql une dos tablas sum, where y group by

Está multiplicando el monto de los pagos con el número de registros de ventas, porque está uniendo todos los registros de pagos con todos los registros de ventas antes de sumar los montos.

Agregue primero y únase solo después.

En caso de que siempre solo pueda haber un registro de pagos por fecha, hora y nombre:

select p.name, p.time, p.name, s.sales_total, p.amount
from payments p
join
(
  select date, time, name, sum(total) as total
  from sales
  group by date, time, name
) s
 on s.date = p.date and s.time = p.time and s.name = p.name
where p.date = date '2017-04-01';

De lo contrario:

select p.name, p.time, p.name, s.total, p.amount
(
  select date, time, name, sum(amount) as amount
  from payments
  group by date, time, name
) p
join
(
  select date, time, name, sum(total) as total
  from sales
  group by date, time, name
) s
 on s.date = p.date and s.time = p.time and s.name = p.name
where p.date = date '2017-04-01';