SQL查询按自定义顺序排序

3

我有这样一个自定义排序需求:

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

我考虑使用 UNION 结合 ORDER BYLIMIT 来组合三个不同的查询。但是我无法这样做,因为 UNION 必须在 ORDER BYLIMIT 之前使用。
如何进行选择以实现上述自定义排序?
另一个可行的解决方法是使此选择查询返回的第一个记录成为最后一个记录,但是如何实现呢?
2个回答

2

试试这个:

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个常量必须大于N。
这是一个简单的演示


感谢您的帮助。在我看来,如果记录在未来变得越来越多,使用硬编码的“100000001”可能会导致问题? - Cloud Chen
DISTINCT查询怎么样? - ErTR

2

添加一个名为CustomSeq的新表,其中包含两列ValueSequence。在该表中,您可以存储值及其自定义顺序。然后连接到该表并通过其Sequence列进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接