как объединить два одинаковых запроса с одним условием без использования объединения - PullRequest
1 голос
/ 06 апреля 2020
select date_format(FROM_UNIXTIME(employee.inserted_time), "%X-%V") as Week, count(employee.id) as managers
from jobs
join dept on jobs.id = dept.id
join employee on jobs.id = employee.id and employee.salary > 10000
where employee.status ='rejected' or 'cancelled' 
group by Week;

select date_format(FROM_UNIXTIME(employee.inserted_time), "%X-%V") as Week, count(employee.id) as employees
from jobs
join dept on jobs.id = dept.id
join employee on jobs.id = employee.id and employee.salary > 10000
where employee.status ='accepted' or 'working' 
group by Week;

Total_jobs = (менеджеры + сотрудники) / менеджеры

У меня есть два почти одинаковых запроса, но с одним другим условием employee.status. Я хочу получить результат как менеджеры и сотрудники, и мне нужно рассчитать Total_jobs всего за один запрос

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Использовать условную агрегацию:

SELECT
    DATE_FORMAT(FROM_UNIXTIME(e.inserted_time), '%X-%V') AS Week,
    COUNT(CASE WHEN d.status in ('rejected', 'cancelled') THEN e.id END) AS managers,
    COUNT(CASE WHEN d.status in ('accepted', 'working') THEN e.id END) AS employees
FROM jobs j
INNER JOIN dept d ON j.id = d.id
INNER JOIN employee e ON j.id = e.id AND e.salary > 10000
GROUP BY Week;
0 голосов
/ 06 апреля 2020

Вы можете использовать CASE внутри SUM(), чтобы сделать это в одном запросе. Например:

select
  date_format(FROM_UNIXTIME(employee.inserted_time), "%X-%V") as Week,
  sum(case when employee.status in ('rejected', 'cancelled') then 1 else 0 end) 
    as managers
  sum(case when employee.status in ('accepted', 'working') then 1 else 0 end)
    as employees
from jobs
join dept on jobs.id = dept.id
join employee on jobs.id = employee.id and employee.salary > 10000
where employee.status in ('rejected', 'cancelled', 'accepted', 'working')
group by Week
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...