具有多个属性的 SQL 排序(按一致性排序)

Posted

技术标签:

【中文标题】具有多个属性的 SQL 排序(按一致性排序)【英文标题】:SQL Sorting with multiple attributes (order by conformity) 【发布时间】:2015-11-10 14:23:40 【问题描述】:

我有一个包含某些属性(例如名称和地址)的表格。在搜索字段中,我想让系统的用户输入他们对这些人的了解并在表格中返回结果。显然,我确实希望最适合的结果排在首位。

    应该在 SQL 命令中完成排名还是有其他可能更好的方法? 有人知道根据最高一致性对结果进行排序/排名的好方法吗?我基本上确实希望最符合搜索条件的人出现在最前面。

您可以在此处查看示例: http://sqlfiddle.com/#!2/19e9ad

感谢您的帮助!

(我目前确实使用 SQL Server,但感谢任何帮助。)

【问题讨论】:

highest conformity 是什么? 我只是用这个词来更好地描述它。对我来说,这意味着结果是否符合要求,记住要检查 5 个属性。 听起来你在要求一个字符串比较函数,比如 Jaro-Winkler。这是 Oracle (docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_match.htm) 的内置函数,我可以想象许多其他 RDBM。 也许您应该解释一下您要进行哪种搜索 @JKau Jaro-Winkler 非常擅长识别只是顺序错误的字符串,分数会反映这一点。运行一些测试,看看它是否能给你想要的结果,但我在我所做的工作(营销客户数据集成)中经常使用它。我开发了一个 API 基本上可以做到这一点,但增加了很多复杂性,例如考虑昵称等。 【参考方案1】:

您可能想要检查全文索引和搜索 - 他们有可能为您完成这项工作的排名选项:

Fulltext index creation info

...和搜索功能信息:

FREETEXTTABLE CONTAINSTABLE

或者,您也可以使用自己的解决方案,例如解析用户输入并逐字匹配,然后提升匹配更多单词的结果,精确的单词排序等。但是您需要自己处理许多情况(像“纽约”等多词城市)。

【讨论】:

【参考方案2】:

听起来您需要一个字符串比较函数,例如 Jaro-Winkler。这是 Oracle (http://docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_match.htm) 的内置函数,我可以想象许多其他 RDBM。

Jaro-Winkler 非常擅长识别只是顺序错误的字符串,而分数会反映这一点。运行一些测试,看看它是否能给你想要的结果,但我在我所做的工作(营销客户数据集成)中经常使用它。我开发了一个 API 基本上可以做到这一点,但增加了很多复杂性,例如考虑昵称等。API 位于 http://matchbox.io/#match-api。

【讨论】:

【参考方案3】:

您可以在 sql 中进行排序,但最常见的解决方案是您在 UI 中进行排序,这样每次用户更改排序顺序时都不必从 db 请求数据。

寻找您可能需要在查询中添加一个字段以显示 comformity 之类的内容

 SELECT *, function_comformity() as comformity

因此,您可以在 UI 上对该字段进行排序,就像对姓名或邮政编码进行排序一样。

【讨论】:

感谢您的帮助!在 UI 中排序时:你如何在那里排序?你有什么可以建议的吗? (即使只是一个涵盖该内容的博客)

以上是关于具有多个属性的 SQL 排序(按一致性排序)的主要内容,如果未能解决你的问题,请参考以下文章

与 SQL 排序依据和空值的数据库一致性

两个excel表怎么对比排序一致?

SQL中多值匹配多值,并按匹配个数排序。

SQL - 选择按多个字段分组的前 n 个,按计数排序

sql语句怎么按照字段1排序后再在本字段内按时间排序?

按多个键值对数据进行排序