Как выбрать сумму значений из одной таблицы, сгруппировав значения из другой?
Имеется 3 таблицы. Характеристика клиентов clientsInfo
, которая может редактироваться, таблица клиентов, где хранится их информация clients
и таблица прочтений книг у этих клиентов clientsReads
.
Если клиент захочет поменять себе имя, то будет запрос не на update, а на insert в таблицу clientsInfo
. Это сделано, чтобы отслеживать актуальную информацию для дальнейших действий.
Пример содержимого таблиц представлен в онлайн mysql, только предварительно надо убрать установку sql_mode=only_full_group_by
.
Возникает проблема. Для отображения статистики, при выполнении следующего запроса, вначале выбираются все редакции клиента, вместе с его прочтением, а потом суммируется. В итоге ни имя не верно, ни кол-во прочтений. Запрос:
SELECT clients.id, name, sum(amount) as readed, balance
FROM clients
inner join clientsInfo on clientsInfo.clientId=clients.id
left join clientsReads on clientsReads.clientId=clients.id
GROUP BY clients.id;
Вывод:
Clark 8 123.2
Ava 10 321
*Без группировки:
Clark 4 123.2
ClarkRename 4 123.2
Ava 10 321
Исправив запрос, на предварительную группировку clientsInfo
, мне удалось исправить проблему с суммой прочтений, но не с актуальной версией. order by id desc
- не работает во вложенном запросе при группировке, можно ли как-то обойтись без 3-й вложенности запроса и как-то иначе получить желаемый результат? Как правильнее будет сгруппировать таблицу версий?
SELECT clients.id, lastVersion.name, sum(amount) as readed, balance
FROM clients
INNER JOIN
( SELECT clientId, name
FROM clientsInfo
GROUP BY clientId
) AS lastVersion
ON lastVersion.clientId=clients.id
left join clientsReads on clientsReads.clientId=clients.id
GROUP BY clients.id;
Вывод:
Clark 4 123.2
Ava 10 321
Ожидаемый результат:
ClarkRename 4 123.2
Ava 10 321