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

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

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

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

【问题讨论】:

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

标签: jquery mysql sql database


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多