SQL 查询按自定义顺序排序

标签 sql select sql-order-by

我有这样的自定义订购需求:

normal ordering  |  custom ordering 
      1          |        7
      2          |        6
      3          |        5
      4          |        4
      5          |        3
      6          |        2
      7          |        8
      .          |        .
      .          |        .
      .          |        .
      .          |        .
      .          |        N
      N          |        1

我考虑过在 ORDER BYLIMIT 的帮助下使用 UNION 组合 3 个不同的选择查询。但是,我不能那样做,因为 UNION 必须在 ORDER BYLIMIT 之前使用。

如何进行选择(或选择)以实现上述自定义排序?

另一种解决方法可能会有所帮助,就是将此选择查询中返回的第一条记录设为最后一条记录,但是怎么做呢?

最佳答案

试试这个:

SELECT x
FROM t1
ORDER BY
    CASE
      WHEN x = 1 THEN 100000001
      WHEN x between 2 and 7 THEN 7 - x
      WHEN x between 8 and ( SELECT max(x) FROM t1 ) - 1 THEN x
      ELSE 100000000 
    END 

100000000个constans必须大于N。
这是一个simple demo

关于SQL 查询按自定义顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18212972/

相关文章:

select - 设置默认值 ACF 选择

sql - TSQL - 如何对 2 列使用 case 语句?

sql - 如何根据某个时间范围进行聚合

mysql - Where 条件 Mysql 中的 CSV

sql - WHERE "table"."column"IN查询的PostgreSQL顺序

php - 在 codeigniter 上的 foreach 中的条件(排序依据)

mysql - MySQL 中的排序陷入困境

sql - 更改表SQL字符串-语法错误

MySQL 查询超时 - 需要加快速度

java - 我怎样才能正确地做到这一点,以便能够在 DBSelectQuery 类中进行选择?