Использование оператора GROUP BY для суммирования строк - PullRequest
0 голосов
/ 16 января 2012

У меня несколько продаж продукта на разных рынках, и мне нужно подвести итоги по каждому названию. Для начала:

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 ]

3 голосов
/ 17 января 2012

Вам нужно объединить 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

2 голосов
/ 16 января 2012

Попробуйте что-то вроде:

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...