Я пытаюсь создать запрос, который предоставляет мне список из пяти заданий для еженедельного продвижения.Запрос работает нормально и дает правильный результат.Есть только один фактор, который нуждается в фильтре.
Мы хотим продвигать разные вакансии разных компаний.ORDER BY
позволяет выбирать рабочие места с наибольшей потребностью в кандидатах.Вполне возможно, что одна компания в пять раз больше всего нуждается в срочнойПоэтому запрос выбирает пять рабочих мест одной компании.Я хочу добавить фильтр, чтобы запрос выбирал максимум две или три работы от одной компании.Но не могу узнать, как.
Я пробовал это с разными углами функции DISTINCT
.Но безрезультатно.Я думаю, что основная проблема связана с неправильной групповой функцией на job.id (просто мысль), но не может найти решение.
SELECT
job.id,
company_name,
city,
job.title,
hourly_rate_amount,
created_at,
count(work_intent.id),
number_of_contractors,
(count(work_intent.id)/number_of_contractors) AS applicants,
(3959 * acos(cos(radians(52.370216)) * cos( radians(address.latitude))
* cos(radians(longitude) - radians(4.895168)) + sin(radians(52.370216)) * sin(radians(latitude)))) AS distance
FROM job
INNER JOIN client on job.client_id = client.id
INNER JOIN address on job.address_id = address.id
LEFT JOIN work_intent on job.id = work_intent.job_id
INNER JOIN job_title on job.job_title_id = job_title.id
WHERE job_title.id = ANY
(SELECT job_title.id FROM job_title WHERE job.job_title_id = '28'
or job.job_title_id = '30'
or job.job_title_id = '31'
or job.job_title_id = '32'
)
AND job.status = 'open'
AND convert(job.starts_at, date) = '2019-09-19'
AND hourly_rate_amount > 1500
GROUP BY job.id
HAVING distance < 20
ORDER BY applicants, distance
LIMIT 5
Я ожидаю, что результат будет:
job.id - company_name - applicants
14842 - company_1 - 0
46983 - company_6 - 0
45110 - company_5 - 0
95625 - company_1 - 1
12055 - company_3 - 2