#sql #oracle
#sql #Oracle
Вопрос:
У меня есть следующий запрос, который вычисляет время найма в днях для всех ad_id на основе заданного USER_PK_ID
SELECT ca.ad_id, r.CAND_ID, u.USER_PK_ID, u.user_id, round(ca.CREATED_DT - r.submitted_dt, 1) as "Time to hire"
FROM CANDAPPL_HISTORY_STAT_CHANGES ca
JOIN ADVERTISEMENTS a on A.AD_ID = CA.AD_ID
JOIN USERS u on a.user_id = U.USER_PK_ID
JOIN REPLIES r on CA.CAND_ID = R.CAND_ID and CA.AD_ID = R.AD_ID
WHERE ca.acc_id = '150500'
AND new_status = 'H'
AND old_status != 'H'
AND u.USER_PK_ID = '504407'
AND (r.submitted_dt is not null or r.referrer like '%(ATSi)%')
AND ca.CREATED_DT >= TO_DATE('2020-08-12', 'YYYY-MM-DD')
AND ca.CREATED_DT <= TO_DATE('2020-08-19', 'YYYY-MM-DD')
Возможно ли реструктурировать этот запрос для группировки по идентификатору пользователя и рассчитать среднее время найма по всем объявлениям для каждого пользователя?
У меня есть следующее, которое группирует по user_id и вычисляет количество ролей, заполненных user_id
SELECT u.USER_PK_ID, u.user_id, count(ca.ad_id) as "Roles Filled"
FROM CANDAPPL_HISTORY_STAT_CHANGES ca
JOIN ADVERTISEMENTS a on A.AD_ID = CA.AD_ID
JOIN USERS u on a.user_id = U.USER_PK_ID
WHERE ca.acc_id = '150500'
AND new_status = 'H'
AND old_status != 'H'
AND ca.CREATED_DT >= TO_DATE('2020-08-12', 'YYYY-MM-DD')
AND ca.CREATED_DT <= TO_DATE('2020-08-19', 'YYYY-MM-DD')
GROUP BY u.USER_PK_ID,u.user_id
ORDER BY count(ca.ad_id) DESC;
Комментарии:
1. Пожалуйста, предоставьте некоторые примеры данных и ожидаемый результат.
2. Вы можете заменить связанные части на эти:
ca.CREATED_DT BETWEEN date'2020-08-12' AND date'2020-08-19'
иORDER BY "Roles Filled" DESC
.
Ответ №1:
Если мое понимание проблемы верно, вам нужно среднее время найма для каждого идентификатора пользователя. Это можно сделать, выполнив groupby для идентификатора пользователя, что-то вроде приведенного ниже
SELECT u.USER_PK_ID, u.user_id, round(AVG(ca.CREATED_DT - r.submitted_dt, 1)) as "AVG Time to hire"
FROM CANDAPPL_HISTORY_STAT_CHANGES ca
JOIN ADVERTISEMENTS a on A.AD_ID = CA.AD_ID
JOIN USERS u on a.user_id = U.USER_PK_ID
JOIN REPLIES r on CA.CAND_ID = R.CAND_ID and CA.AD_ID = R.AD_ID
WHERE ca.acc_id = '150500'
AND new_status = 'H'
AND old_status != 'H'
AND (r.submitted_dt is not null or r.referrer like '%(ATSi)%')
AND ca.CREATED_DT >= TO_DATE('2020-08-12', 'YYYY-MM-DD')
AND ca.CREATED_DT <= TO_DATE('2020-08-19', 'YYYY-MM-DD')
GROUP BY u.USER_PK_ID, u.user_id
Комментарии:
1. да, я думаю, что это правильно, но необходимо, чтобы среднее значение было изменено на этот раунд (среднее значение (ca.CREATED_DT — r.submitted_dt), 1) и удалены и u.USER_PK_ID = ‘504407’
2. Я обновил запрос в соответствии с вашим предложением, пожалуйста, примите ответ. Спасибо