Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql unisce due tabelle sum, where e group by

Stai moltiplicando l'importo dei pagamenti per il numero dei record di vendita, perché stai unendo tutti i record di pagamento con tutti i record di vendita prima di sommare gli importi.

Aggrega prima e unisciti solo dopo.

Nel caso in cui possa esserci sempre un solo record di pagamento per data, ora 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';

Altrimenti:

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';