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 |