Соединение запросов - 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 не содержит значений, то в результате запроса не будет никаких строк.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д