Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql junta duas tabelas soma, onde e agrupa por


Você está multiplicando o valor dos pagamentos pelo número de registros de vendas, porque está juntando todos os registros de pagamentos com todos os registros de vendas antes de somar os valores.

Agregue primeiro e só depois junte.

Caso sempre possa haver apenas um registro de pagamentos por data, hora e nome:
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';

Por outro lado:
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';