mysql

mysql order by 조건을 사용한 정렬 방법

하나에하나 2019. 5. 8. 18:46


order by 를 이용해 조건별 정렬을 할 수 있는 몇가지 찾아 봤지만


정말 맘에 쏙 드는 형태는 없지만 그게 mysql 에 한계인지, 나의 한계인지는 모르겠다.


기본은 케이스 인 것 같다


order by

     case left(name,1)

          when 'E' then 1

          when 'A' then 2

          when 'C' then 3

     end asc



이름의 첫 글자 중 조건에 맞는 경우의 우선 순위를 정한 것 이다.

조건외 리스트는 무작위로 뿌려진다. 때문에 조건외 리스트 정렬을 선언해 준다.



order by

     case left(name,1)

          when 'E' then 1

          when 'A' then 2

          when 'C' then 3

     end asc,

     name desc


이런 식으로 , 이후 계속 조건이나 정렬기준을 추가 할 수 있다.





조금 다른 형태로 단일 비교일 경우


order by

     case

          when not(name like 'E%') then name

     end asc,

     name desc


처럼 사용할 수도 있다. 이름에 E로 시작하는 사람을 제일 앞에 나오게 한다.





더 간단하게 단일의 경우


order by name != 'Edan' asc, name desc


해도 Edan 이 맨 위에 올라온다.


like를 사용하고 싶다면


order by not(name like 'E%') asc, name desc


이다.



또한 order by field(name, 'Edan') asc 이런 field 라는 함수를 이용 할 수도 있다.


하지만 이것은 명확한 값이 아니면 무쓸모이더라.


모든 예제에서 asc는 생략 할 수 있다.




나의 한계는


B1

B2

B3

A3

A2

A1


라는 정렬을 만들어 보지 못 했다.



B3

B2

B1

A1

A2

A3


은 가능하다.



아는 분 댓글로 공유 좀













'mysql' 카테고리의 다른 글

mysql 서브 쿼리  (0) 2019.05.03
여러 row의 같은 필드를 한번에 불러오기  (0) 2016.11.16
mysql 정규표현식  (0) 2016.11.16
substring_index를 활용한 지역 통계  (0) 2016.07.08
mysql를 이용한 시간 빼기  (0) 2016.02.29