Mysql
 sql >> база данни >  >> RDS >> Mysql

сумирайте два реда и подредете по дата/общо

За това трябва да филтрираме данните за избраното, а не за присъединяването.

Премахнете това условие:

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

и добавете това към избраното:

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

Редактиране:

цялата заявка:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как ефективно да конвертирате long int в четворен IP с точки в bash

  2. ПРИСЪЕДИНЕТЕ СЕ с GROUP BY в нормализирана БД за ресурси, теми и глави

  3. Neo4j - Създайте индекс с помощта на Cypher

  4. tomcat 7.0.42 обединяване, hibernate 4.2, mysql rock solid autoreconnect решение

  5. Времето за изчакване на заключване е превишено; опитайте да рестартирате транзакцията, въпреки че не използвам транзакция