You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现按区域层级筛选排序前10条相似职位的SQL逻辑?

相似职位多粒度位置匹配查询实现方案

你原有SQL的问题在于WHERE条件强制同时匹配LocalZone、City、State三个字段,只能拿到最细粒度的匹配结果,不足10条时无法自动补充上层级的职位。调整逻辑如下:

  • 放宽筛选条件到仅需State(省)匹配,覆盖所有三层级的候选职位
  • 通过CASE WHEN在排序阶段给不同匹配粒度的职位打权重,实现细粒度优先排序
  • 取TOP 10时会自动按权重优先取细粒度结果,不足时自动补上层级结果,完全符合你的业务规则

调整后的完整SQL如下:

DECLARE 
    @currentJobId INT = 101,
    @currentJobLocalZoneId INT = 201,
    @currentJobCityId INT = 301,
    @currentStateId INT = 401
SELECT TOP 10
        j.JobId,
        j.Title,
        j.Salary,
        l.StateId,
        l.CityId, 
        l.LocalZoneId
FROM Jobs j
-- 不需要无位置信息的职位可保留INNER JOIN,需要的话改回LEFT JOIN即可
INNER JOIN Location l ON l.LocationId = j.LocationId
WHERE 
    j.JobId != @currentJobId
    -- 最低要求匹配省,同时兼容省参数为空的场景
    AND (@currentStateId IS NULL OR l.StateId = @currentStateId)
ORDER BY 
    -- 按匹配粒度优先级排序,粒度越细权重越高
    CASE 
        WHEN @currentJobLocalZoneId IS NOT NULL AND l.LocalZoneId = @currentJobLocalZoneId THEN 1
        WHEN @currentJobCityId IS NOT NULL AND l.CityId = @currentJobCityId THEN 2
        ELSE 3 
    END,
    -- 同优先级可自定义排序规则,示例为薪资从高到低,可按需替换为发布时间、热度等字段
    j.Salary DESC

排序逻辑完全对齐你的要求:

  1. 匹配LocalZone(温哥华市中心)的职位权重为1,排在最前,对应步骤1的结果
  2. 未匹配LocalZone但匹配City(温哥华)的职位权重为2,排在中间,对应步骤2补充的结果
  3. 仅匹配State(不列颠哥伦比亚省)的职位权重为3,排在最后,对应步骤3补充的结果

内容的提问来源于stack exchange,提问作者I Love Stackoverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:09:05