보통 최신의 값으로 정렬을 많이하지면 특이한 경우에는 특정 값으로 정렬이 필요한 경우가 생긴다.
Oracle의 경우에는 decode 라는 함수를 써서 했던것으로 기억 하고 있었으나 오랜만에 Mysql을 사용하는 저로서는 조금 힘든 부분이 있었다.
다행이 Mysql 에도 FIELD 라는 예약어를 사용하여 정렬 하는 방법이 있었다.
어떻게 사용하나?
예를 들어 코인 거래소를 운영한다고 생각하자.
현재 코인 테이블 상태
SELECT *
FROM my_coins
;
기본 정렬 순서
SELECT *
FROM my_coins
ORDER BY evaluation_amount DESC, bookmark ASC
;
요청 사항이 들어왔다고 가정하다 비트코인, 이더리움은 가지고 있지 않아도 표시 되어야하고 가장 상위에 노출 되어야한다. (비트, 이더) 순서로
이런 요청 사항이 들어왔을 시 FIELD 는 빛을 바란다 :)
그때! 이상한 부분으 발견했다...
FIELD로 지정하지 않는 값이 있다면 FIELD(symbol, 'ETH', 'BTC') 이 이외에 심볼에 대한 정렬은 등록된 순서로 보이는 것이다.
SELECT *
FROM my_coins
ORDER BY FIELD(symbol, 'ETH', 'BTC')
Oracle의 DECODE를 생각해서 그런지 모르겠지만
아무래도 순서는 ETH -> BTC -> MLK -> LAMB -> TRX 이렇게 정렬 될 것이라 생각했다.
하지만 필드에 대한 부분만 따로 정렬이 되는것을 볼 수 있다.
내가 원하는 대로 데이터를 뽑기 위해선?
전부 그렇지 않겠지만 FIELD를 사용하려면 아래와 같이 정렬이 되어야 한다.
SELECT *
FROM my_coins
ORDER BY FIELD(symbol, 'ETH', 'BTC') DESC, evaluation_amount DESC, bookmark ASC
;
지금 까지 Mysql FIELD에 대한 부분을 알아보았다.
가끔 값에 대한 정렬 순서가 필요할 때 사용한다면 아주 유용할 것 같다. (예외 조심)