按重要性、权重和长度对查询进行排序

Posted

技术标签:

【中文标题】按重要性、权重和长度对查询进行排序【英文标题】:Sorting query by importance, weight, and length 【发布时间】:2018-11-17 06:01:06 【问题描述】:

我有一个包含 100 个人的数据库,他们都有特定的体重和长度。这些人中有 10 人具有“重要”地位。我想根据他们的体重(从重到轻)对这个列表进行排序,如果有些人的体重相同,他们应该按照长度(从短到高)进行排序。

此排序顺序有一个例外。前 3 个结果应列出集合中最短的“重要”人物(从短到长排序)。

如何在 SQL 查询中编写此代码?

【问题讨论】:

添加一些示例表数据和预期结果 - 作为格式化文本,而不是图像。同时向我们展示您当前的查询尝试。 【参考方案1】:

我发现这个问题在 mysql 中相当具有挑战性。我可以想到几种不同的方法:

union all 变量 窗口函数(在 MySQL 8.0 之前的版本中不可用) order by 子句中的子查询

这些都不是微不足道的。这是一种解决方案:

select t.*
from ((select t.*, 1 as which
       from t
       where status = 'important'
       order by height
       limit 3
      ) union all
      (select t.*, 2 as which
       from t
       where status = 'important'
       order by height
       limit 999999 offset 2
      )
     ) t
order by which,
         (case when which = 1 then weight end),
        weight, desc, length desc

【讨论】:

以上是关于按重要性、权重和长度对查询进行排序的主要内容,如果未能解决你的问题,请参考以下文章

TermWeight 词权重算法

详解 Lucene 对 Term的权重(Term weight) 计算

sort()方法 - 论逐字逐句研究教程的重要性

如何使用 SVM 的权重向量和逻辑回归进行特征重要性?

Elasticsearch 重要概念小计

按特定值对 ListView 或 ListView.ItemTemplate 进行排序