2012-01-16 4 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 | 
+--------+-----------------+------------------+ 

Как вы можете видеть, это не суммируется строки значений. Как бы я изменить ЗЕЬЕСТ таким образом, что он подводит итог строки значение, чтобы дать мне:

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

'group by' clauses не делают суммирование. Они просто говорят, какие строки должны «рушиться» для использования в совокупных функциях. вам все равно нужно указать, к каким полям должна применяться функция 'sum()' (или другие агрегатные функции). –

ответ

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

+0

Это было скопировано прямо из вопроса, и я просто добавил в функции суммы. OP, вероятно, нужно будет также группировать с помощью 'partner_share_currency', чтобы получить результат, как показано в примерах. –

+1

Спасибо, что указали, что это была ошибка. Я изменю вопрос, чтобы задуматься. – David542

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 позволит вам включить только title в предложении GROUP BY, где большинство других СУБД также потребует вам перечислить другие не агрегатные столбцы в GROUP BY. В частности, это partner_share_currency

Смежные вопросы