Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql verbindet zwei Tabellen sum, wo und gruppieren nach

Sie multiplizieren den Zahlungsbetrag mit der Anzahl der Verkaufsdatensätze, weil Sie alle Zahlungsdatensätze mit allen Verkaufsdatensätzen verknüpfen, bevor Sie die Beträge summieren.

Erst aggregieren und erst dann beitreten.

Falls es immer nur einen Zahlungssatz pro Datum, Uhrzeit und Name geben kann:

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

Ansonsten:

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