Какой разработчик потратил время на фактически завершенный проект и для какого клиента это был?
select p.id project_id, p.name project_name, d.name dev_name,
case p.customer_id when 0 then 'Internal' else c.name end cust_name
from project p
left join customer c on c.id = p.customer_id
join task t on t.project_id = p.id
join developer_task dt on dt.task_id = t.id
join developer d on d.id = dt.dev_id
where p.end_date is not null
Это основные объединения.p.end_date is not null
отвечает за фильтрацию готовых проектов.Я не знаю, содержит ли таблица customer
строку для внутреннего проекта, поэтому я использовал case
construction и left join
, чтобы не терять строки для таких проектов.
Сколько задач поддержки выполнял каждый разработчикв прошлом году для проектов Proof of Concept?
select id, name, nvl(cnt, 0) cnt
from developer d
left join (
select dev_id, count(1) cnt
from project p
join task t on t.project_id = p.id
join developer_task dt on dt.task_id = t.id
where p.type = 2
and t.start_date <= trunc(sysdate, 'year') - 1
and (add_months(trunc(sysdate, 'year'), -12) <= t.end_date or t.end_date is null)
group by dev_id) t on t.dev_id = d.id
Здесь я сгруппировал сначала количество задач для доказательства концептуальных проектов для каждого разработчика.Фильтрация дат несколько сложна, пожалуйста, внимательно изучите ее.Последним шагом было показать данные для всех разработчиков, поэтому я использовал left join
, чтобы показать все, даже если они не участвовали в таких проектах.Их количество = 0.
Какой разработчик еще не участвовал в проекте Scrum?
select *
from developer
where id not in (
select dev_id
from project p
join task t on t.project_id = p.id
join developer_task dt on dt.task_id = t.id
where p.type = 0)
Найти dev_id для всех проектов Scrum.Затем используйте not in
.Вы также можете использовать not exists
, minus
, аналитические count
.Oracle часто позволяет выполнять задачу несколькими способами.
Вот демоверсия dbfiddle со всеми рабочими запросами и примерами данных, которые я себе представлял, чтобы иметь материал для проверки правильности синтаксиса и, еслирезультаты выглядят хорошо.