У меня есть 3 таблицы, называемые магазинами, услугами и рейтингом.SUM() возвращает неправильные значения при использовании левого соединения с GROUP_CONCAT
Магазины имеют
Services имеют более чем один услуги для магазинов
Рейтинг имеет рейтинг магазинов
Мне нужно, чтобы получить подробную информацию магазин с услугами, а также рейтинг в одном запросе.
Я сделал этот запрос
select shops.*, count(distinct rating.id) as rating_count,
sum(rating.rating) as total_rating,
GROUP_CONCAT(distinct services.servicename SEPARATOR " <=> ") as servicename
from shops
LEFT JOIN rating on rating.shop_id = shops.id
LEFT JOIN services on services.shop_id = shops.id
group by shops.id
Но shop1 имеет total_rating 21. Но это показывает 42.
мне нужен правильный общий рейтинг, а также все услуги для этого магазины.
Проверить это fiddle
Почему ваши сервисные имена называются 'shop1',' shop2' и т. Д.? Это делает ваш вопрос очень запутанным. –
@TimBiegeleisen Исправлено. – RaGu
Возможно, это может быть более элегантно написано следующим образом: http://sqlfiddle.com/#!9/ece82/29 – Strawberry