У меня есть следующая таблица:
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
Вам необходимо предоставить полный запрос и результат, который вы получите.
Хорошо, я опубликую полный запрос
У меня тоже не работает, не работает ... .
... в вопросе подразумевается как BNF (форма Бэкуса-Наура), если это так, вы не должны читать его буквально или использовать его таким образом .. @Serg
Я добавил полный запрос
account_transactions.*, enterprise_invoces.* подразумевает все столбцы, включая агрегированные. Это определенно потерпит неудачу. Явно перечислите необходимые столбцы.
Я прочитал этот ответ и понял, как это работает: stackoverflow.com/a/2421441/8291684
Ваши образцы данных и запрос не имеют ничего общего друг с другом.
Кроме того, как правило, это не то, как вы должны использовать group by. См. руководство, но MySQL 5.7.5+ поддерживает исключение из основного правила SQL 1992, которое называется функционально зависимым, что может сделать ваш запрос действительным.






В вашем запросе выбора не должно быть других столбцов, а должны быть только столбцы, упомянутые в группе, а также столбец, который необходимо агрегировать. Таким образом, запрос должен быть таким, как показано ниже.
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 fromaccount_transactionsinner joinenterprise_invocesonenterprise_invoces.AC_id=account_transactions.AT_codewhereAT_createuser= 15 and date(AT_transactiondatetime) >= 2019-04-11 and date(AT_transactiondatetime) <= 2019-07-29 andAC_code>= 601 andAC_code<= 761 group byenterprise_invoces.AC_id,account_transactions.AT_transactionfichenoorder byAT_transactiondatetimedesc
Опубликуйте свой полный запрос, который вы пробовали.. Если я не пропущу что-то очень очевидное здесь, запрос
SELECT t.listId , t.accountId , SUM(t.ammount) FROM t GROUP BY t.listId , t.accountIdдолжен дать ожидаемые результаты.. Что, я предполагаю, вы пробовали здесь?