Как сгруппировать по двум полям?

У меня есть следующая таблица:

listId | accountId | amount 
1        1           20
1        1           20
2        2           30
2        2           30

Мне нужно SUM(amount) и сгруппировать по listId, accountId, чтобы получить результат:

 listId | accountId | amount | 
 1        1           40
 2        2           60

Но это не работает для меня: SUM(amount) ... GROUP BY listId, accountId

Мой полный запрос:

select `account_transactions`.*, 
`enterprise_invoces`.*, 
ABS(SUM(IF(AT_amount>0, AT_amount, 0))) AS debit, 
ABS(SUM(IF(AT_amount<0, AT_amount, 0))) AS credit 
from `account_transactions` 
inner join `enterprise_invoces` 
on `enterprise_invoces`.`AC_id` = `account_transactions`.`AT_code` 

where `AT_createuser` = 15 and 
date(`AT_transactiondatetime`) >= 2019-04-11 and
date(`AT_transactiondatetime`) <= 2019-07-29 and 
`AC_code` >= 601 and
`AC_code` <= 761 
group by `enterprise_invoces`.`AC_id`, `account_transactions.AT_transactionficheno` 
order by `AT_transactiondatetime` desc

Опубликуйте свой полный запрос, который вы пробовали.. Если я не пропущу что-то очень очевидное здесь, запрос SELECT t.listId , t.accountId , SUM(t.ammount) FROM t GROUP BY t.listId , t.accountId должен дать ожидаемые результаты.. Что, я предполагаю, вы пробовали здесь?

Raymond Nijland 06.07.2019 16:25

Вам необходимо предоставить полный запрос и результат, который вы получите.

Roman-Stop RU aggression in UA 06.07.2019 16:25

Хорошо, я опубликую полный запрос

OPV 06.07.2019 16:30

У меня тоже не работает, не работает ... .

Serg 06.07.2019 16:30
"У меня тоже не работает, не работает на..." Я предполагаю, что ... в вопросе подразумевается как BNF (форма Бэкуса-Наура), если это так, вы не должны читать его буквально или использовать его таким образом .. @Serg
Raymond Nijland 06.07.2019 16:34

Я добавил полный запрос

OPV 06.07.2019 16:39
account_transactions.*, enterprise_invoces.* подразумевает все столбцы, включая агрегированные. Это определенно потерпит неудачу. Явно перечислите необходимые столбцы.
Serg 06.07.2019 16:44

Я прочитал этот ответ и понял, как это работает: stackoverflow.com/a/2421441/8291684

OPV 06.07.2019 16:45

Ваши образцы данных и запрос не имеют ничего общего друг с другом.

Gordon Linoff 06.07.2019 16:49

Кроме того, как правило, это не то, как вы должны использовать group by. См. руководство, но MySQL 5.7.5+ поддерживает исключение из основного правила SQL 1992, которое называется функционально зависимым, что может сделать ваш запрос действительным.

Raymond Nijland 06.07.2019 16:55
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
10
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем запросе выбора не должно быть других столбцов, а должны быть только столбцы, упомянутые в группе, а также столбец, который необходимо агрегировать. Таким образом, запрос должен быть таким, как показано ниже.

select enterprise_invoces.AC_id, account_transactions.AT_transactionficheno , ABS(SUM(IF(AT_amount>0, AT_amount, 0))) AS debit, ABS(SUM(IF(AT_amount<0, AT_amount, 0))) AS credit from account_transactions inner join enterprise_invoces on enterprise_invoces.AC_id = account_transactions.AT_code where AT_createuser = 15 and date(AT_transactiondatetime) >= 2019-04-11 and date(AT_transactiondatetime) <= 2019-07-29 and AC_code >= 601 and AC_code <= 761 group by enterprise_invoces.AC_id, account_transactions.AT_transactionficheno order by AT_transactiondatetime desc

Другие вопросы по теме