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

sum to rækker og sorter efter dato/total

Til dette skal vi filtrere dataene på select og ikke på join.

Fjern denne betingelse:

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

og føj dette til valget:

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

Rediger:

hele forespørgslen:

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. Oracle SQL Where-klausul for at finde datoposter, der er ældre end 30 dage

  2. MySQL 5.6.10 InnoDB kan ikke oprette tabel, da tabel allerede eksisterer

  3. Fil URL'er eller hvordan man åbner mappe fra URL

  4. Begræns værdien af ​​en MySQL-datatype til et specifikt område (helst ikke ENUM)