2012-01-16 155 views
0

我在不同市场有多个产品销售,我需要总结每个标题的总计。要启动:使用GROUP BY语句合计行

mysql> SELECT title, partner_share_currency, us_earnings_usd, cad_earnings_cad 
     FROM raw_financials WHERE title LIKE "%Gamers%"; 
+--------+------------------------+-----------------+------------------+ 
| title | partner_share_currency | us_earnings_usd | cad_earnings_cad | 
+--------+------------------------+-----------------+------------------+ 
| Gamers | USD     |   3.2500 |   0.0000 | 
| Gamers | CAD     |   0.0000 |   4.0000 | 
| Gamers | USD     |   4.5000 |   0.0000 | 
+--------+------------------------+-----------------+------------------+ 

这是我目前正在做得到GROUP BY标题:

mysql> SELECT title, us_earnings_usd, cad_earnings_cad 
     FROM raw_financials WHERE title LIKE "%Gamers%" GROUP BY title; 
+--------+-----------------+------------------+ 
| title | us_earnings_usd | cad_earnings_cad | 
+--------+-----------------+------------------+ 
| Gamers |   3.2500 |   0.0000 | 
+--------+-----------------+------------------+ 

正如你所看到的,它不求和值的行。我将如何改变SELECT语句,它总结了值的行,给我:

+--------+-----------------+------------------+ 
| title | us_earnings_usd | cad_earnings_cad | 
+--------+-----------------+------------------+ 
| Gamers |   7.7500 |   4.0000 | 
+--------+-----------------+------------------+ 
+2

'group by'子句不做求和。他们只是说哪些行应该被“折叠”以用于聚合函数。你仍然必须告诉'sum()'函数(或其他聚合函数)应该应用于哪些字段。 – 2012-01-16 20:01:01

回答

2

试着这么做:

mysql> SELECT title, SUM(us_earnings_usd) AS us_earnings_usd, SUM(cad_earnings_cad) AS cad_earnings_cad 
     FROM raw_financials WHERE title LIKE "%Gamers%" GROUP BY title; 

SUM是将各组操作的功能,当你在你的发言中有这个GROUP BY条款。有关更多类似功能,请参阅MySQL aggregate functions

+1

如何按标题分组并选择非列函数('partner_share_currency')? – gdoron 2012-01-16 20:01:14

+0

这是直接复制出来的问题,我只是在总和函数中添加的。 OP也可能需要通过'partner_share_currency'进行分组,以获得结果,如示例中所示。 – 2012-01-16 20:04:12

+1

感谢您指出,这是一个错误 - 我会改变这个问题来反思。 – David542 2012-01-16 20:05:30

3

您需要总计SUM()来总计行数。你只有一个GROUP BY

SELECT 
    title, 
    partner_share_currency, 
    SUM(us_earnings_usd) AS usd, 
    SUM(cad_earnings_cad) AS cad 
FROM raw_financials 
WHERE title LIKE '%Gamers%' 
GROUP BY title, partner_share_currency 

注意,MySQL将允许你只titleGROUP BY子句,其中大多数其他RDBMS还需要你以列出GROUP BY其他非集合列中包含。具体来说,这就是partner_share_currency