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

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

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

Здравствуйте, помогите, пожалуйста, объединить эти запросы. Задача такова: вывести список партнеров и заработок с них. Партнеры записаны в таблице Accounts, заработок с них записан в таблице History, который может быть как в USD, так и в RUB.
Листинг программы
  1. SELECT `Login`, `Email`, `Ref`, `Ref2`, `Ref3` FROM `Accounts` WHERE `Ref` = 'ID ПРИГЛАСИТЕЛЯ' OR `Ref2` = 'ID ПРИГЛАСИТЕЛЯ' OR `Ref3` = 'ID ПРИГЛАСИТЕЛЯ'
  2. SELECT SUM(`Amount`) AS `USD` FROM `History` WHERE `User` = "ЛОГИН ПАРТНЕРА" AND `Custom` = "USD" AND `Login` = "ЛОГИН ПРИГЛАСИТЕЛЯ"
  3. SELECT SUM(`Amount`) AS `RUB` FROM `History` WHERE `User` = "ЛОГИН ПАРТНЕРА" AND `Custom` = "RUB" AND `Login` = "ЛОГИН ПРИГЛАСИТЕЛЯ"
Удалось сделать до такого вида:
Листинг программы
  1. SELECT
  2. accs.Login,
  3. accs.Email,
  4. accs.Ref,
  5. accs.Ref2,
  6. accs.Ref3,
  7. hist.RUB
  8. FROM
  9. Accounts accs
  10. LEFT JOIN
  11. (
  12. SELECT
  13. SUM(Amount) AS RUB,
  14. USER AS Login
  15. FROM
  16. History subrov
  17. WHERE
  18. subrov.Custom = 'RUB' AND subrov.Login = '?s'
  19. GROUP BY
  20. subrov.User
  21. ) 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
  22. ORDER BY
  23. `hist`.`RUB` DESC
Выводит сумму в рублях, сюда нужно добавить сумму в USD. Помогите, пожалуйста

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

textual
Листинг программы
  1. SELECT
  2.     accs.Login,
  3.     accs.Email,
  4.     accs.Ref,
  5.     accs.Ref2,
  6.     accs.Ref3,
  7.     hist.CNT,
  8.     hist.Custom
  9. FROM
  10.     Accounts accs
  11.         LEFT JOIN
  12.     (SELECT
  13.         SUM(Amount) AS CNT, USER AS Login, Custom
  14.     FROM
  15.         History subrov
  16.     GROUP BY subrov.User , subrov.Custom , subrov.Amount) hist ON accs.Login = hist.Login
  17. WHERE accs.Ref = '?i' OR accs.Ref2 = '?i' OR accs.Ref3 = '?i'
  18. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут