Możesz sortować za pomocą funkcji warunkowych za pomocą funkcji IF(). Dokumentacja dla IF()
stanów:
IF(expr1,expr2,expr3)
Jeśli wyr1 jest TRUE (wyr1 <> 0 i wyr1 <> NULL) następnie IF() zwraca wyr2; w przeciwnym razie zwraca wyrażenie 3. IF() zwraca wartość liczbową lub łańcuchową o wartości , w zależności od kontekstu, w którym jest używana.
więc można go używać do sortowania określonych elementów na górze tak:
SELECT *
FROM fruit
ORDER BY
IF(name = 'Peach', 0, 1),
IF(name = 'Apple', 0, 1),
IF(name = 'Apricot', 0, 1),
name DESC
Jest to seria zleceń, z których pierwszy biorąc najwyższym priorytecie. Więc jeśli name='Peach'
, wartość będzie 0, dla wszystkich innych wartość będzie 1. Ponieważ w domyślnym porządku ASC, 0 występuje przed 1, to zapewnia "Brzoskwinia" będzie na górze listy. Drugi rodzaj w serii określa, jak zerwać więzy dla pierwszego sortowania. W tym przypadku wszystkie elementy oprócz remisu "Brzoskwinia" w pierwszym sortowaniu o wartości "1". I w tym przypadku "Apple" zostaje wypchnięty na szczyt listy remisów, co w rzeczywistości jest drugim miejscem na liście. Etc ... aż do końca ostatnia nazwa DESC.
Jako druga odpowiedź wskazuje CASE() jest alternatywą dla serii IF()
s:
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
Pierwsza wersja zwraca wynik wartość = compare_value. Druga wersja zwraca wynik dla pierwszego warunku, który jest prawdziwy. Jeśli nie było pasującej wartości wyniku, wynik po ELSE został zwrócony lub NULL, jeśli nie ma części ELSE.