У меня есть таблица с именем "invoices". Я хотел бы суммировать сумму и сгруппировать ее компаниями и датой
+------------+------------------+-------------+-----------+
| company_id | company | date | amount |
+------------+--------------------------------+-----------+
| 1 | chevrolet | 2017-11-18 | 100 |
| 1 | chevrolet | 2017-11-18 | -70 |
| 1 | chevrolet | 2017-11-25 | 50 |
| 2 | mercedes | 2017-04-01 | 30 |
| 2 | mercedes | 2017-04-01 | -30 |
| 2 | mercedes | 2017-09-01 | 50 |
| 3 | toyota | 2017-05-12 | 60 |
+------------+------------------+-------------+-----------+
Желаемый результат:
+------------+------------------+-------------+-----------+
| company_id | model_name | date | amount |
+------------+--------------------------------+-----------+
| 1 | chevrolet | 2017-11-18 | 30 |
| 1 | chevrolet | 2017-11-25 | 50 |
| 2 | mercedes | 2017-04-01 | 0 |
| 2 | mercedes | 2017-09-01 | 50 |
| 3 | toyota | 2017-05-12 | 60 |
+------------+------------------+-------------+-----------+
Как мне это сделать?
У вас уже есть спецификация на английском языке, просто нужно перевести на SQL:
select company_id, model_name, date, sum(amount) as amount
from invoices
group by company_id, model_name, date
В MySQL вы можете (в зависимости от того, как он настроен) уйти, не выполняя строку GROUP BY, и вы можете увидеть SQL-запросы, подобные этому, в ваших путешествиях по миру MySQL:
select company_id, model_name, date, sum(amount) as amount
from invoices
MySQL неявно вставляет группу для вас. Лично я всегда рекомендую поместить ее в явном виде, так как немногие другие БД делают "автогруппу" и придерживаясь стандартного SQL делает ваши знания SQL более переносимыми. Вы также можете найти сильных сторонников "группы по обязательному явному аргументу", который, я признаю, имеет свои достоинства :)
Все вместе
SELECT
SUM (amount)
FROM <table-name>
GROUP BY company, date;
Для группировки по компаниям
SELECT
SUM (amount)
FROM <table-name>
GROUP BY company;
Для группировки по дате
SELECT
SUM (amount)
FROM <table-name>
GROUP BY date;