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

zwei Zeilen summieren und nach Datum / Summe sortieren

Dazu müssen wir die Daten nach Select und nicht nach Join filtern.

Diese Bedingung entfernen:

AND (month(d.date), year(d.date)) = (month(CURDATE()), year(CURDATE()))

und fügen Sie dies zu select hinzu:

SUM (CASE WHEN (month(d.date), year(d.date)) = (month(CURDATE()), year(CURDATE())) THEN 1 ELSE 0 END) as monthly

Bearbeiten:

ganze Abfrage:

SELECT users.id, users.username, 
  COALESCE(sum(CASE WHEN (month(donations.date), year(donations.date)) = (month(CURDATE()), year(CURDATE())) THEN donations.amount ELSE 0 END), 0) monthly_sum, 
  COALESCE(sum(CASE WHEN (month(donations.date), year(donations.date)) = (month(CURDATE()), year(CURDATE())) THEN 1 ELSE 0 END), 0) monthly_amount, 

  COALESCE(sum(donations.amount), 0) total_sum, 
  count(*) total_amount

from users
left join donations
  on donations.uid = users.id
group by users.id, users.username

http://sqlfiddle.com/#!2/20a974/20/0