SQL: процентное выполнение

#sql

#sql

Вопрос:

Мне нужен SQL-запрос для вычисления процента завершенных курсов по местоположению, которые представляют собой разные таблицы SQL.

Таблица курсов имеет статус = ‘C’ (статус завершения).

 select Locations.Name, ( ??? ) as PercentCompleted
from Locations inner join Candidates ON Locations.Id = Candidates.SpecifiedLocation
inner join Courses on Candidates.Id = Courses.CandidateId
Group By Locations.Name
  

Я хочу, чтобы результаты были:

 Location   PercentCompleted
Loc1         10
Loc2         50
Loc3         75
  

где 10, 50 и 75 — это проценты завершенных курсов для каждого местоположения.

Может ли это быть достигнуто с помощью одного SQL-запроса?

Комментарии:

1. Какая у вас СУБД?

2. Без структуры таблицы, пример ввода, как вы ожидаете, что мы вам поможем?

Ответ №1:

Если я правильно понимаю, я думаю, вы можете сделать:

 select l.Name,
       avg(case when co.status = 'C' then 100.0 else 0 end) as PercentCompleted
from Locations l inner join
     Candidates c
     on l.Id = c.SpecifiedLocation inner join
     Courses co
     on c.Id = co.CandidateId
group by l.name;
  

Ответ №2:

попробуйте, как показано ниже

 select Locations.Name, (sum(case when Status = 'C'  then 1 else 0 end)/(select count(*)
from Candidates c where c.SpecifiedLocation=Locations.Id))*100
  as PercentCompleted
from Locations inner join Candidates ON Locations.Id = Candidates.SpecifiedLocation
inner join Courses on Candidates.Id = Courses.CandidateId
Group By Locations.Name