Я пытаюсь сравнить два столбца JSONB в таблице, на данный момент это делается в приложении, однако это не позволяет выполнять правильный поиск, фильтрацию и упорядочивание без загрузки всего набора данных. Было бы лучше, если бы мы могли провести это сравнение в базе данных.
Ниже приведен пример данных и расчета.
employer = {
"autism": "1",
"social": "1",
"dementia": "0",
"domestic": "1",
}
employers_keys = ["autism","social","domestic"]
candidate = {
"autism": "0",
"social": "1",
"dementia": "0",
"domestic": "1",
}
candidate_keys = ["social","domestic"]
remainder_keys = employer_key - candidate_key = ["autism"]
1-(remainder_keys.length/employer_keys.length) = 1-(1/3) = 2/3 = 66%
Этот процесс довольно тривиален в Ruby , jsonb-> array -> select -> вычисление
Однако я хотел бы выполнить это в SQL или в функции на уровне БД, например,
function compare_ json (работодатель, кандидат), возвращающий десятичное число.
Точнее
Select candidates.id,
st_distance_sphere(st_makepoint(employer.long, employer.lat), st_makepoint(candidates.long, candidates.lat)) /
1000 / 8 * 5 as distance
from (select * from users where id = 8117) employer,
(select * from users where role_id = 5) candidates
where st_distance_sphere(st_makepoint(employer.long, employer.lat), st_makepoint(candidates.long, candidates.lat)) /
1000 / 8 * 5 < 25
order by distance
Приведенное выше SQL вычисляет расстояние между одним работодателем и несколькими кандидатами, встроенные запросы работодателя.skills (1 строка), кандидат. навыки (n строк).
Таким образом, результат должен быть ..
Идентификатор кандидата, расстояние, соответствие навыков (работодатель. навыки, кандидаты. навыки)
Как и перед редактированием, любые указания будут приветствоваться.