如何在mysql中为“ORDER BY”设置权重?

8

我有一个结束于以下内容的完整文本查询:

 ORDER BY RELEVANCE DESC, CLICK_RATE DESC

我可以在 order by 中给列分配权重吗?也许将关联度分配 0.3 的权重,将点击率分配 0.7 的权重?

目前的情况是,即使我交换它们的顺序,结果也不尽如人意。

作为替代方案,如何让前 3 个结果按点击率排序,其余按 关联度 排序。

2个回答

12

这应该可以运行

ORDER BY (.3 * 关联度) + (.7 * 点击率) DESC

演示

来自评论的更新

使前三个结果按点击率排序,其余结果按相关性排序

您需要使用子查询首先识别前三个结果并进行排序

SELECT test.id, 
       test.relevance, 
       test.click_rate, 
       top_3_click_rate.id         t3_id, 
       top_3_click_rate.click_rate t3_click_rate 
FROM   test 
       LEFT JOIN (SELECT id, 
                         click_rate 
                  FROM   test 
                  ORDER  BY click_rate DESC 
                  LIMIT  3) top_3_click_rate 
         ON test.id = top_3_click_rate.id 
ORDER  BY top_3_click_rate.click_rate DESC, 
          test.relevance DESC 

演示


相关度字段为0-1,点击率字段为0.1及以上...这样是否仍然有效?非常感谢您的回答,谢谢。 - califmerchant
@califmerchant 我不知道为什么我认为转换会是一个问题,但实际上并不是。话虽如此,因为相关性字段比点击率大一个数量级,你可能会发现它会压倒点击率。你可能需要尝试不同的数字来找到你满意的值。 - Conrad Frix
有没有办法让前三个结果按点击率排序,其余的按相关性排序? - califmerchant
@califmerchant 是的,你可以这样做,我已经更新了我的答案。你可能想考虑编辑你的问题,包括询问这个其他的选择。这样更多的人就能看到你也在问这个问题。这有助于其他可能回答的人以及将来可能有同样问题的人。 - Conrad Frix
@califmerchant 没问题。我希望你不介意我更新了你的问题,包括你的原始问题和第二个问题。当人们回答你的问题并且你大幅度更改时,他们往往会抱怨。 - Conrad Frix
显示剩余2条评论

-4

你可以随时使用WHERE。

试试这个: WHERE RELEVANCE > 0.3 AND RELEVANCE < 0.7 ORDER BY RELEVANCE DESC, CLICK_RATE DESC


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接