sql >> Databasteknik >  >> RDS >> Mysql

summera två rader och ordna efter datum/total

För detta måste vi filtrera data på select och inte på join.

Ta bort det här villkoret:

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

och lägg till detta i välj:

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

Redigera:

hela frågan:

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



  1. Hur skapar jag en CSV-fil från databasen i Python?

  2. mysql group_concat med en räkning inuti?

  3. mySQL:redigera/spara my.cnf-fil

  4. SQL SELECT-syntax – listad av DBMS