我有这样的自定义订购需求:
normal ordering | custom ordering
1 | 7
2 | 6
3 | 5
4 | 4
5 | 3
6 | 2
7 | 8
. | .
. | .
. | .
. | .
. | N
N | 1
我考虑过使用UNION
在ORDER BY
和LIMIT
的帮助下合并3个不同的选择查询。但是,我不能这样做,因为UNION
必须在 ORDER BY
和LIMIT
之前使用。
如何进行选择(或选择)以实现上述自定义排序?
另一种解决方法可能有帮助,只需将此选择查询中返回的第一条记录作为最后一条记录,但如何?
答案 0 :(得分:2)
使用两列CustomSeq
和Value
添加新表Sequence
。在该表中,您可以存储值及其自定义顺序。然后加入该表并按其Sequence
列进行排序。
答案 1 :(得分: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.
这是simple demo