Соединение запросов - MySQL
Формулировка задачи:
Здравствуйте, помогите, пожалуйста, объединить эти запросы. Задача такова: вывести список партнеров и заработок с них. Партнеры записаны в таблице Accounts, заработок с них записан в таблице History, который может быть как в USD, так и в RUB.
Выводит сумму в рублях, сюда нужно добавить сумму в USD. Помогите, пожалуйста
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
Решение задачи: «Соединение запросов»
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
Объяснение кода листинга программы
- В данном коде используется язык SQL для работы с базой данных.
- Задача заключается в соединении двух запросов: основного запроса на выборку данных из таблицы Accounts и вложенного запроса на выборку данных из таблицы History.
- Вложенный запрос в функции LEFT JOIN представляет собой подзапрос, который сначала группирует данные по полям User, Custom и Amount, а затем суммирует значения поля Amount для каждой группы, присваивая результат переменной CNT. Также, в этом подзапросе формируется переменная Custom.
- Основной запрос выбирает данные из таблицы Accounts и выполняет соединение с данными из вложенного запроса на основе равенства логинов.
- В итоговом результате выбираются следующие поля: Login, Email, Ref, Ref2, Ref3, CNT, Custom.
- Результат сортируется по убыванию значения переменной CNT.
- Вложенный запрос и соединение с таблицей History выполняются только один раз, так как результат сохраняется в переменных CNT и Custom.
- Значение '?i' в условии WHERE используется как местозаполнитель для значения, которое должно быть заменено на конкретное значение перед выполнением запроса. Это может быть, например, параметр запроса или переменная среды.
- Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, то в результате запроса не будет никаких строк.
- Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, то в результате запроса будут возвращены строки, соответствующие этому значению.
- Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, то в результате запроса будут возвращены все строки, соответствующие этим полям.
- Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History содержит значение, то в результате запроса будут возвращены строки, соответствующие этому значению.
- Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
- Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History содержит значение, то в результате запроса будут возвращены строки, соответствующие этому значению.
- Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
- Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, и при этом поле Custom из таблицы History содержит значение, то в результате запроса будут возвращены все строки, соответствующие этим полям.
- Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
- Если значение '?i' в условии WHERE не равно ни одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
- Если значение '?i' в условии WHERE равно одному из полей Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
- Если значение '?i' в условии WHERE равно нескольким полям Ref, Ref2, Ref3, и при этом поле Custom из таблицы History не содержит значений, то в результате запроса не будет никаких строк.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д