问题
I have a custom ordering need like this:
normal ordering | custom ordering
1 | 7
2 | 6
3 | 5
4 | 4
5 | 3
6 | 2
7 | 8
. | .
. | .
. | .
. | .
. | N
N | 1
I have thought about using UNION to combine 3 different select queries with the help of ORDER BY and LIMIT. However, I can not do that because UNION have to be used before ORDER BY and LIMIT.
How can I make a selection (or selections) to achieve the custom ordering above?
Another workaround might help is just make the 1st record returned in this select query the last record, but how?
回答1:
Try this:
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 must be greather than N.
Here is a simple demo
回答2:
Add a New Table CustomSeq with two columns, Value and Sequence. In that table you can store the values and their custom order. then join to that table and order by it's Sequence column.
来源:https://stackoverflow.com/questions/18212972/sql-query-ordering-in-custom-order