Запрос для создания таблиц представлен в файле schema.sql
- Отобрать кандидатов по совпадающему набору требуемых навыков. Если полного совпадения нет, то выбрать с наибольшим количеством совпадений.
- Среди выбранных кандидатов выбрать тех, кто хотел эту вакансию. Если таких нет, то опираться на зарплатные ожидания.
- Если по результатам предыдущего шага осталось несколько кандидатов, то выбрать по совпадениям дополнительных навыков.
Для лучшего подбора можно дополнить модель данных важностью (весами) навыков для вакансии, и при поиске частичных совпадений по навыкам считать сумму весов вместо количества.
select vacancy_id, name, count(*) as wanted_count
from applicant_wanted_vacancy
inner join vacancy v on applicant_wanted_vacancy.vacancy_id = v.id
where v.company_id = 1
group by vacancy_id
order by wanted_count desc limit 5;
Для простоты и наглядности ID компании был жестко задан, в реальности его нужно будет передать в prepared statement или в параметр хранимой функции.
Команды для создания данных представлены в файле create_data.sql.