按重要性、权重和长度对查询进行排序
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
【讨论】:
以上是关于按重要性、权重和长度对查询进行排序的主要内容,如果未能解决你的问题,请参考以下文章