UNION ALL
/ UNION
создает несколько строк.Вы хотите собрать ряды вместе.Обычно это вместо JOIN
.
В этом случае, я думаю, что-то вроде этого делает то, что вы хотите:
Select a.id as id, CONCAT(a.first_name, ' ', a.last_name) as Name,
coalesce(j.all_jobs_count, 0) as all_jobs_count,
coalesce(j.canceled_jobs_count, 0) as canceled_jobs_count,
coalesce(j.finished_jobs_count, 0) as finished_jobs_count,
coalesce(0, deleted_jobs_count) as deleted_jobs_count
From admin a left join
(select j.created_by_id,
count(distinct j.id) as all_jobs_count,
sum( j.job_status_id = 25 ) as canceled_jobs_count,
sum( j.job_status_id in (31, 30, 3) ) as finished_jobs_count
from job j
where j.created_by_level = \'admin\' and
j.request_date > AdminExportFromDate() and
j.request_date < AdminExportToDate()
group by j.created_by_id
) j
on j.created_by_id = a.id left join
(select dl.data, count(*) as deleted_jobs_count
from deleted_log dl
where dl.`type` LIKE \'job\' and
dl.`created_at` > AdminExportFromDate() AND
dl.`created_at` < AdminExportToDate()
group by dl.data
) dl
on dl.data RLIKE CONCAT(\'"created_by_level":"admin", "created_by_id":"\', a.id, \'"\')
РЕДАКТИРОВАТЬ:
Выше очевидно выигралне работает для просмотра в MySQL (arggh!).Вместо этого можно использовать подзапросы в предложении from
:
Select a.id as id, CONCAT(a.first_name, ' ', a.last_name) as Name,
(select count(*)
from jobs j
where j.created_by_id = a.id and
j.created_by_level = \'admin\' and
j.request_date > AdminExportFromDate() and
j.request_date < AdminExportToDate()
) as all_jobs_count,
(select count(*)
from jobs j
where j.created_by_id = a.id and
j.created_by_level = \'admin\' and
j.request_date > AdminExportFromDate() and
j.request_date < AdminExportToDate() and
j.job_status = 25
) as canceled_jobs_count,
(select count(*)
from jobs j
where j.created_by_id = a.id and
j.created_by_level = \'admin\' and
j.request_date > AdminExportFromDate() and
j.request_date < AdminExportToDate() and
j.job_status in (31, 30, 3)
) as finished_jobs_count,
(select count(*) as deleted_jobs_count
from deleted_log dl
where dl.data rlike concat(\'"created_by_level":"admin", "created_by_id":"\', a.id, \'"\') and
dl.`type` like \'job\' and
dl.`created_at` > AdminExportFromDate() AND
dl.`created_at` < AdminExportToDate()
) as deleted_jobs_count
From admin a