mysql 잘하시는분 조언좀 부탁드려요
본문
안녕하세요.
우선 그누와 상관없는 질문이라 죄송합니다.
mysql 정렬에 대해 고민을 하고 있습니다.
잘하시는분 좀 알려주세요..ㅠㅠ
code |
name |
key1 |
key2 |
a123 |
A |
1000 |
1100 |
a124 |
B |
1000 |
|
b12 |
C |
2000 |
1300 |
b123 | D | 2000 | 1200 |
c12 | E | 1500 |
|
c123 | F | 1500 | 2000 |
위의 데이터가 있다고 가정합니다.
원하는데로 데이터 값을 노출하는건 되겠는데,
key2 값이 있을땐 key2 값을, 없을때 key1 값을 가져와서 올림차순으로 정렬되게 하려면 어떻게 해야 하나요?
order by key2 asc, key1 asc <== 이렇게 했더니,
key2 가 먼저 정렬되고, 그뒤로 key1 이 정렬되서 나오는데 아래처럼요..
code | name | key1 | key2 |
a123 | A | 1000 | 1100 |
b123 | D | 2000 | 1200 |
b12 | C | 2000 | 1300 |
c123 | F | 1500 | 2000 |
a124 | B | 1000 |
|
c12 | E | 1500 |
|
key2 값이 있을땐 key2 값을, 없을때 key1 값을 기준으로 올림차순으로 정렬되게 하려면 어떻게 해야 하나요?
아래처럼요....
code | name | key1 | key2 |
a124 | B | 1000 |
|
a123 | A | 1000 | 1100 |
b123 | D | 2000 | 1200 |
b12 | C | 2000 | 1300 |
c12 | E | 1500 |
|
c123 | F | 1500 | 2000 |
그누와상관없는 질문이라 죄송합니당.
mysql 잘하시는분 좀 알려주세용~ ㅡㅡ
답변 2
order by 절에 if문이 사용 가능합니다.
회원님같은경우엔 대상필드가 int 형이라고 가정할때
order by if ( key2 > 0 , key2, key1 ) asc
이런식으로 접근해보세요.
key2 의 값이 0 보다 크다면 key2 값으로 asc 정렬
읍다면 key1 값으로 asc 정렬..
ORDER BY IF (key2 IS NOT NULL || key2 <> '' || key2 > 0, key2, key1) ASC
위에분의 조건에 null 체크와 빈값 체크만 더붙였습니다. (해당 타입이 int가 아니라는 조건에)