Соединение запросов - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите, пожалуйста, объединить эти запросы. Задача такова: вывести список партнеров и заработок с них. Партнеры записаны в таблице Accounts, заработок с них записан в таблице History, который может быть как в USD, так и в RUB.
SELECT `Login`, `Email`, `Ref`, `Ref2`, `Ref3` FROM `Accounts` WHERE `Ref` = 'ID ПРИГЛАСИТЕЛЯ' OR `Ref2` = 'ID ПРИГЛАСИТЕЛЯ' OR `Ref3` = 'ID ПРИГЛАСИТЕЛЯ'
 
SELECT SUM(`Amount`) AS `USD` FROM `History` WHERE `User` = "ЛОГИН ПАРТНЕРА" AND `Custom` = "USD" AND `Login` = "ЛОГИН ПРИГЛАСИТЕЛЯ"
 
SELECT SUM(`Amount`) AS `RUB` FROM `History` WHERE `User` = "ЛОГИН ПАРТНЕРА" AND `Custom` = "RUB" AND `Login` = "ЛОГИН ПРИГЛАСИТЕЛЯ"
Удалось сделать до такого вида:
SELECT 
accs.Login, 
accs.Email, 
accs.Ref, 
accs.Ref2, 
accs.Ref3, 
hist.RUB 
FROM 
Accounts accs 
LEFT JOIN 
( 
SELECT 
SUM(Amount) AS RUB, 
USER AS Login 
FROM 
History subrov 
WHERE 
subrov.Custom = 'RUB' AND subrov.Login = '?s' 
GROUP BY 
subrov.User 
) hist ON accs.Ref = '?i' AND accs.Login = hist.Login OR accs.Ref2 = '?i' AND accs.Login = hist.Login OR accs.Ref3 = '?i' AND accs.Login = hist.Login 
ORDER BY 
`hist`.`RUB` DESC
Выводит сумму в рублях, сюда нужно добавить сумму в USD. Помогите, пожалуйста

Решение задачи: «Соединение запросов»

textual
Листинг программы
SELECT 
    accs.Login,
    accs.Email,
    accs.Ref,
    accs.Ref2,
    accs.Ref3,
    hist.CNT,
    hist.Custom
FROM
    Accounts accs
        LEFT JOIN
    (SELECT 
        SUM(Amount) AS CNT, USER AS Login, Custom
    FROM
        History subrov
    GROUP BY subrov.User , subrov.Custom , subrov.Amount) hist ON accs.Login = hist.Login
WHERE accs.Ref = '?i' OR accs.Ref2 = '?i' OR accs.Ref3 = '?i'
ORDER BY `hist`.`CNT` DESC

Объяснение кода листинга программы

  1. В данном коде используется язык SQL для работы с базой данных.
  2. Задача заключается в соединении двух запросов: основного запроса на выборку данных из таблицы Accounts и вложенного запроса на выборку данных из таблицы History.
  3. Вложенный запрос в функции LEFT JOIN представляет собой подзапрос, который сначала группирует данные по полям User, Custom и Amount, а затем суммирует значения поля Amount для каждой группы, присваивая результат переменной CNT. Также, в этом подзапросе формируется переменная Custom.
  4. Основной запрос выбирает данные из таблицы Accounts и выполняет соединение с данными из вложенного запроса на основе равенства логинов.
  5. В итоговом результате выбираются следующие поля: Login, Email, Ref, Ref2, Ref3, CNT, Custom.
  6. Результат сортируется по убыванию значения переменной CNT.
  7. Вложенный запрос и соединение с таблицей History выполняются только один раз, так как результат сохраняется в переменных CNT и Custom.
  8. Значение '?i' в условии WHERE используется как местозаполнитель для значения, которое должно быть заменено на конкретное значение перед выполнением запроса. Это может быть, например, параметр запроса или переменная среды.
  9. Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, то в результате запроса не будет никаких строк.
  10. Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, то в результате запроса будут возвращены строки, соответствующие этому значению.
  11. Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, то в результате запроса будут возвращены все строки, соответствующие этим полям.
  12. Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History содержит значение, то в результате запроса будут возвращены строки, соответствующие этому значению.
  13. Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
  14. Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History содержит значение, то в результате запроса будут возвращены строки, соответствующие этому значению.
  15. Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
  16. Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, и при этом поле Custom из таблицы History содержит значение, то в результате запроса будут возвращены все строки, соответствующие этим полям.
  17. Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
  18. Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
  19. Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
  20. Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5