当前位置: 首页 > 面试题库 >

SQL顺序结果按匹配的字段数

须衡虑
2023-03-14
问题内容

这里有点复杂的SQL问题。

我目前有一个与多个字段匹配的SELECT语句,就像这样。

SELECT field1, field2, field3, field4, field5
FROM table
WHERE field1 = 'variable 1'  
AND field2 = 'variable 2' 
AND field3 = 'variable 3' 
AND field4 = 'variable 4' 
AND field5 = 'variable 5'

我想修改该语句,以使其使用OR而不是AND,从而选择与任何字段匹配的所有记录。

下一步是使用评分系统对结果进行排名。

If field 1 was matched then 1000 is added to the score
If field 2 was matched then 800 is added to the score
If field 3 was matched then 600 is added to the score
If field 4 was matched then 10 is added to the score
If field 5 was matched then 1 is added to the score

所以…

匹配1-如果field2和field 3匹配,则得分为1400

匹配2-如果field1和field 4匹配,则得分将为1010

比赛1将在结果顶部。

对于使用SQL实现此目标的任何帮助,我们将不胜感激。


问题答案:

尝试:

SELECT
    ....
    FROM ....

    ORDER BY
        (CASE WHEN field1 = 'variable 1' THEN 1000 ELSE 0 END
        +CASE WHEN field2 = 'variable 2' THEN 800 ELSE 0 END
        +CASE WHEN field3 = 'variable 3' THEN 600 ELSE 0 END
        +CASE WHEN field4 = 'variable 4' THEN 10 ELSE 0 END
        +CASE WHEN field5 = 'variable 5' THEN 1 ELSE 0 END
        ) DESC


 类似资料:
  • 问题内容: 我有一个包含5个整数ID的表,并想添加一列以接受这些ID,对其进行排序并以类似于以下内容的方式将它们连接起来。 是否有使订购更快更轻松的功能?上帝禁止我必须手动编写订单。 问题答案: 您也可以使用(在线演示)

  • 问题内容: 我的测试似乎证实了 映射到,即字段仅按顺序位置匹配,而不按名称匹配。总是这样吗,也就是说,我可以依靠这种行为吗?不幸的是,文档没有对此进行指定(或者我没有找到它)。 问题答案: 没错,SQL Server不会尝试对列名称进行任何映射,因为您可以将任何别名应用于所需的源数据。它将始终参考顺序位置。

  • 问题内容: 我有一个用户模型和一个提交模型。每个提交都有一个上载用户的外键字段user_submitted。 我的问题很简单:如何获得提交量最多的三个用户的列表? 我尝试在用户模型上创建num_submissions方法: 然后执行: 但这失败了,就像我尝试过的所有其他尝试一样。我实际上可以使用智能数据库查询吗?还是我应该在视图文件中做些更怪异的事情? 问题答案: 你没有在示例模型代码中提及,但在

  • 问题内容: 如何获得按字段排序的struct输出? 问题答案: A 是字段的 有序 集合。该包使用反射来获取值的字段和值,并按照定义它们的顺序生成输出。 因此,最简单的解决方案是在已经按字母顺序排列字段的位置声明类型: 如果您不能修改字段的顺序(例如,内存布局很重要),则可以通过为结构类型指定一个方法来实现接口: 所述包检查所传递的值工具,并且如果是的话,调用它的方法,以产生输出。 该解决方案的缺

  • 问题内容: 当我使用IN从表中选择一组行时,例如 有一种SQL技巧可以按照IN集合中给定的顺序恢复它们吗? 因此,在示例中,假设x具有ID为23、55、44和12的行,则将按该顺序返回这四行。 问题答案:

  • 问题内容: 有没有一种方法可以使我按照WHERE命令中要求的顺序使mysql从成员数据库返回结果? 目前,无论我做什么,它将返回MemberID ASC排序的结果。我希望它能按我要求的顺序返回6,3,5。 问题答案: