@schwabsergey

Как правильно составить многотабличный запрос к БД MySQL?

Есть таблицы:
Users
------
id
login

Partners
----------
id
parner_name

Items
-------
id
item_name
price

Orders
--------
id
user_id
partner_id
item_id

Нужно составить запрос,чтобы получить сколько каждый партнер потратил денег на каждого пользователя. То есть, имя партнера - имя пользователя - потраченная сумма. Если партнер принимал участие в нескольких покупках пользователя, то сумма должна выводиться сразу за все покупки, а не за каждую отдельную.
У меня получилось вот, что:
SELECT Partners.partners_name, Users.login, Items.price
FROM Orders
INNER JOIN Partners ON Partners.id = Orders.partner_id
INNER JOIN Users ON Users.id = Orders.user_id
INNER JOIN Items ON Orders.item_id = Items.id
WHERE Orders.partner_id !=0
ORDER BY Users.login;

Но данный запрос выводит каждую покупку одного партнера и одного пользователя отдельно. То, есть если партнер участвовал в покупках пользователя несколько раз, то этот факт будет выведен несколькими строками по количеству таких покупок, а должна быть одна строка и одна сумма всех таких покупок.
Помогите пожалуйста модифицировать запрос, чтобы получить необходимый по условию результат! Заранее, спасибо!
  • Вопрос задан
  • 963 просмотра
Решения вопроса 1
@AVSomov
Ключ к решению лежит в использовании агрегатных функций.
Первоисточник: dev.mysql.com/doc/refman/5.7/en/group-by-functions...
или www.mysql.ru/docs/gruber/mg06.html

Конкретно по указанному запросу нужно применить функцию sum и предложение group by.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@schwabsergey Автор вопроса
Спасибо, вот что получилось:
SELECT Partners.partners_name AS "Partner", Users.login AS "User", SUM(Items.price) AS "Order SUM"
FROM Orders
INNER JOIN Partners ON Partners.id = Orders.partner_id
INNER JOIN Users ON Users.id = Orders.user_id
INNER JOIN Items ON Orders.item_id = Items.id
WHERE Orders.partner_id !=0
GROUP BY Partners.partners_name, Users.login
ORDER BY Partners.partners_name;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы