아래와 같이 되있는 것을 0을 빼고, 1부터 오름차순으로 정리하고 싶은데 하는 방법을 알려주셨으면 감사하겠습니다.
0을 null 로 취하여 정렳해 보세요
0인값을 Null로 변환하여 정렬하라는 건가요?
현재 기본값을 무조건 0으로 넣고있기때문에 지금상태에서는 정렬할 수 없나요?
Order by로 어떻게 안될려나..
기본적인 order by의 예외는 null 자료인 경우 외에는 없습니다.
8보다 null이 크다는 DB입장에서는 알 수 없지만, 8보다 0이 더 큰 것은 DB 입장에서는 명확하기 때문입니다.
DB에서 하는 일은 여기까지입니다.
'0은 모든 숫자들 보다 크다' 라는 것은 사용자 정의 규칙일 뿐입니다.
이것을 위해서 order by 에서 사용할 수 있는 using 예약어를 제공하는데,
이 using 뒤에는 연사자가 옵니다. 이 연산자를 하나 만들어서 쓰면 풀릴 것 같네요.
예를 들어서,
select 8 >? 0 이 쿼리 결과가 false가 나오는 >? 연산자 하나를 만들면 될듯.
그런데, 일이 너무 번그러워질 것 같네요.
그냥 0를 null 보는 방법을 택하든가, 아니면, union all 로 두개의 쿼리로 나눠 합치든가 해야할 것 같네요.
tyro님,김상기님 감사합니다.
두개의 쿼리합치는 것은 아직 실력이 안되서 쿼리를 2번 날리는거로 해결했네요^^
대충 이렇게 하시면 될 듯해요.
--explain analyze with temp as ( select 0 num union all select 0 num union all select 1 num union all select 4 num union all select 2 num ) select num from temp order by case when num = 0 then (select max(num) + 1 from temp) else num end
WHERE num > 0 ORDER BY NUM;
이렇게 하면 안되었을까요? ㅎㅎ