假设以下作业表:
`jobpost`
- name
- position
- is_featured (boolean)
我想为给定用户建立一个建议工作列表,其中jobpost.position
与用户的职位相匹配(例如,会计师将获得会计工作)。
完成此操作的基本查询类似于:
SELECT name FROM jobpost WHERE jobpost.position IN (list of user positions) LIMIT 10
我还想确保以 ( is_featured=True
) 为特色的工作获得额外的权重。然后我需要建立一个概率分布列表,从中选择随机数量的工作。为此,我正在考虑构建一个包含作业名称和概率的 python 元组列表,然后使用random.random()
. 例如,类似(伪代码):
x = [('job 1', 0.2), ('job 2', 0.2), ('job 3', 0.2), ('job 4', 0.4)]
# pick three out of the list of jobs above
random.random.sample(x, 3)
我有三个与此相关的问题:
这看起来是正确的方法吗?
我将如何使用该
random
模块(或另一个模块)来选择 n 个对象,每个对象具有一定的给定概率?在给特色工作相对于非特色工作赋予加权平均值方面,以下查询是正确的方法吗?如果没有,有什么更好的方法?
SELECT name, 1 * (CASE WHEN is_featured=True THEN % ELSE 1) as weighted_average FROM ...
这会给我一个包含工作名称和相对权重的元组。