MySQL Redash - Соединение итоговых данных 2 подзапросов в одном select

Необходимо объединить итоговые данные двух select без потери данных, которая происходит при условии выборки по where. А именно нужно к первому подзапросу добавить итоговые данные из второго подзапроса 'Moves'

Запрос ниже выдает корректные данные, но убирает людей, которых нет во втором подзапросе (request_2), но есть в первом (request_1). Я не понимаю как заставить второй подзапрос выводить "0" при отсутствии данных с условиями where. Люди исключаются во втором подзапросе во время проверки where.

Пытался связать через left join. В этом случае выводятся все люди, но данные задваиваются, а в столбце Move у всех одно и то же значение.

SUBSTRING_INDEX использую для того, чтобы убрать цифры после запятой.

Я понимаю, что совпадение нужно делать через left join request_1.user = request_2.user2 чтобы не терять данные из request_1, но как исключить дублирование значений - я не знаю. Либо же нужно во втором подзапросе вывести всех сотрудников со значением "0" в обход where ... and ... and ... , но и тут у меня тоже ничего не получается. Я наверное куда только мог запихнуть IFNULL, но это не дает нужного результата. Хотя я не исключаю того, что добавлял его не туда, либо добавлять его нужно не только в один подзапрос.

SELECT 
SUBSTRING_INDEX (round (request_1.1_Level + request_2.Moves), ',', 1)  as sum,
request_1.1_Level as 1lvl,
request_1.2_Level as 2lvl,
request_2.Moves as move,
request_1.user as user
FROM
(
    select
    SUBSTRING_INDEX (round (sum(th.history_type_id in (1, 2, 3) and th.queue_id NOT IN (5)) + (round(sum(th.history_type_id in (6, 7)) / 16))), ',', 1) as '1_Level',
    SUBSTRING_INDEX (SUM(th.history_type_id in (1, 2, 3) and th.queue_id = 5), ',', 1) as '2_Level',
    CONCAT(u.last_name, ' ', u.first_name) as user
    From ticket_history th
    left join users u on th.change_by = u.id
    where th.history_type_id in (1, 2, 3, 6, 7) and th.create_time between ('{{start}}') and ('{{stop}}')
    group by th.create_by
) AS request_1,

(
    select
    SUBSTRING_INDEX ((round (COUNT(DISTINCT th.ticket_id) / 9)), ',', 1) as Moves,
    CONCAT(u.last_name, ' ', u.first_name) as user2
    From ticket_history th
    left join users u on th.change_by = u.id
    left join rep_paymove rp on CONCAT(SUBSTRING_INDEX(th.name, '%%', -1), ' ', th.queue_id) = CONCAT(rp.queuefrom, ' ', rp.queueto)
    where th.create_time between ('{{start}}') and ('{{stop}}')
    and th.history_type_id = 92
    and CONCAT(SUBSTRING_INDEX(th.name, '%%', -1), ' ', th.queue_id) = CONCAT(rp.queuefrom, ' ', rp.queueto)
    group by th.create_by
) AS request_2
where request_1.user = request_2.user2

UPD: обновленный запрос. Нужно только вывести значение для 'only move', а именно посчитать кол-во записей по условиям(как where, но в рамках select). Первый SUBSTRING_INDEX содержит суммарную информацию. Третий SUBSTRING_INDEX содержит только информацию, которую как раз необходимо посчитать по условиям. Т.е. осталось разобраться только с третьим SUBSTRING_INDEX.

select
SUBSTRING_INDEX (round(sum(th.history_type_id in (1, 2, 3) and th.queue_id NOT IN (5)) + (round(sum(th.history_type_id in (6, 7)) / 16)) + (round(COUNT(DISTINCT th.ticket_id and th.history_type_id = 92 and CONCAT(SUBSTRING_INDEX(th.name, '%%', -1), ' ', th.queue_id) = CONCAT(rp.queuefrom, ' ', rp.queueto)) / 9))), ',', 1) as '1_Level',
SUBSTRING_INDEX (SUM(th.history_type_id in (1, 2, 3) and th.queue_id = 5), ',', 1) as '2_Level',
SUBSTRING_INDEX (round(COUNT(DISTINCT th.ticket_id and (th.history_type_id in (92)) and (CONCAT(SUBSTRING_INDEX(th.name, '%%', -1), ' ', th.queue_id) = CONCAT(rp.queuefrom, ' ', rp.queueto))) / 9), ',', 1) as 'only move',
CONCAT(u.last_name, ' ', u.first_name) as user
From ticket_history th
left join users u on th.change_by = u.id
left join ticket t ON th.ticket_id = t.id
left join rep_paymove rp on CONCAT(SUBSTRING_INDEX(th.name, '%%', -1), ' ', th.queue_id) = CONCAT(rp.queuefrom, ' ', rp.queueto)
where th.history_type_id in (1, 2, 3, 6, 7, 92) and th.create_time between ('{{start}}') and ('{{stop}}')
group by th.create_by

Ответы (1 шт):

Автор решения: Виктор Карев

Вот тут описывается вариант реализации full join:

http://www.sql-tutorial.ru/ru/book_full_join_and_mysql.html

→ Ссылка