Группировать записи по двум столбцам

0

У меня есть таблица с именем "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      |
+------------+------------------+-------------+-----------+

Как мне это сделать?

Теги:

3 ответа

1

У вас уже есть спецификация на английском языке, просто нужно перевести на 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 более переносимыми. Вы также можете найти сильных сторонников "группы по обязательному явному аргументу", который, я признаю, имеет свои достоинства :)

0

Все вместе

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;
0

Используйте следующее:

SELECT company_id, model_name, date , SUM(amount) AS amount 
             FROM invoices GROUP BY company, date;

См. Здесь и здесь для получения дополнительной информации о предложениях и примерах GROUP BY.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню