SELECT CASE WHEN X >= Y && X >= Z THEN X
WHEN Y >= Z && Y >= X THEN Y
ELSE Z END,
CASE WHEN X >= Y && X < Z THEN X
WHEN X >= Z && X < Y THEN X
WHEN Y >= X && Y < Z THEN Y
WHEN Y >= Z && Y < Z THEN Y
ELSE Z END,
CASE WHEN X <= Y && X <= Z THEN X
WHEN Y <= Z && Y <= X THEN Y
ELSE Z
FROM Table
ORDER BY CASE WHEN X >= Y && X >= Z THEN X
WHEN Y >= Z && Y >= X THEN Y
ELSE Z END;
Off верхней части моей головы, что должно работать. Я не собираюсь давать обещания о производительности. Если бы это был Microsoft SQL, у меня возникло бы желание создать вторую таблицу, которая сохранила значения в строке в порядке и установила триггер, чтобы обновить вторую таблицу.
Теперь это, очевидно, будет работать только в том случае, если у вас есть 3 столбца. 4 колонки больше головной боли, и это на самом деле, где вы должны начать думать новый способ хранения информации, такой как стол, как это:
------------------------------
| row_id | column_id | value |
------------------------------
| 1 | 'X' | 7 |
| 1 | 'Y' | 8 |
| 1 | 'Z' | 9 |
| 2 | 'X' | 3 |
... и так далее.
После того, как вы получили данные в этом формате, делать какие-то:
SELECT row_id, value FROM TABLE ORDER BY row_id, value DESC;
вдруг становится супер-легкий.