Mysql对捐赠的查询给出了准确的金额,但没有显示所有事件


Mysql query for donation is giving accurate sum but not displaying all events

我想以以下方式显示捐赠数据,所有捐赠的总额将显示在每个捐赠者下面。

Johnny Cruz
    Charity: Event 001 | Amount: US$ 100    
    Charity: Event 002 | Amount: US$  30    
    Charity: Event 003 | Amount: US$  90            
                         Total : US$ 220
Mike Polo
    Charity: Event 002 | Amount: US$ 200    
    Charity: Event 004 | Amount: US$ 125    
                         Total : US$ 325
Donald Thomas
    Charity: Event 005 | Amount: US$  75   
                         Total : US$  75 
Thomas Stain
    Charity: Event 002 | Amount: US$ 125
    Charity: Event 003 | Amount: US$  85  
                         Total : US$ 210  

这是我当前正在使用的查询。

SELECT *, SUM(amount) AS total_donation_per_donator FROM tr_donation WHERE ngopkid=1  GROUP BY donator ORDER BY donator ASC, event ASC

上面的查询是我下面提到的结果。它为每个捐赠者提供正确的捐款金额,但只显示一个活动。我需要在查询中做什么更改才能得到像上面提到的样本一样的结果?请帮忙。

Johnny Cruz
    Charity: Event 001 | Amount: US$ 100    
                         Total : US$ 220
Mike Polo
    Charity: Event 002 | Amount: US$ 200    
                         Total : US$ 325
Donald Thomas
    Charity: Event 005 | Amount: US$  75   
                         Total : US$  75 
Thomas Stain
    Charity: Event 002 | Amount: US$ 125
                         Total : US$ 210  

这是表格结构。

CREATE TABLE IF NOT EXISTS `tr_donation` (
  `pkid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `ngopkid` bigint(20) unsigned NOT NULL DEFAULT '0',
  `donator` varchar(100) NOT NULL DEFAULT '',
  `eventpkid` bigint(20) unsigned NOT NULL DEFAULT '0',
  `event` varchar(100) NOT NULL DEFAULT '',
  `amount` float unsigned NOT NULL DEFAULT '0',
  `postdate` datetime DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`pkid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

---编辑---

若我使用下面的查询,它会以下面的方式给出结果。

SELECT *, SUM(amount) AS total_donation_per_donator FROM tr_donation WHERE ngopkid=1  GROUP BY donator, event ORDER BY donator ASC, event ASC
Johnny Cruz
    Charity: Event 001 | Amount: US$ 100
                         Total : US$ 100
    Charity: Event 002 | Amount: US$  30    
                         Total : US$  30
    Charity: Event 003 | Amount: US$  90            
                         Total : US$  90
Mike Polo
    Charity: Event 002 | Amount: US$ 200
                         Total : US$ 200
    Charity: Event 004 | Amount: US$ 125    
                         Total : US$ 125
Donald Thomas
    Charity: Event 005 | Amount: US$  75   
                         Total : US$  75 
Thomas Stain
    Charity: Event 002 | Amount: US$ 125
                         Total : US$ 125
    Charity: Event 003 | Amount: US$  85  
                         Total : US$  85 

使用MySQL"WITH ROLLUP"

http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

来自文件:

GROUP BY子句允许WITH ROLLUP修饰符导致要添加到摘要输出的行。这些行表示更高级别(或超聚合)的汇总操作。

示例:

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year;
+------+-------------+
| year | SUM(profit) |
+------+-------------+
| 2000 |        4525 |
| 2001 |        3010 |
+------+-------------+
mysql> SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP;
+------+-------------+
| year | SUM(profit) |
+------+-------------+
| 2000 |        4525 |
| 2001 |        3010 |
| NULL |        7535 |
+------+-------------+

阅读文档了解更多信息

这就是我的意思:http://sqlfiddle.com/#!2/636141/8