문제> 다음과 같은 ip목록을 가진 [그림1]테이블에서 ip순서대로 정렬[그림2]하여 결과 출력
*Postgre SQL은 rownum 사용 불가하여 row_number 사용

<정답>
1. rownum없어 row_number로 대체하여 num생성
row_number order by ip로만 생성시 10,100,10.1과 10.100.1.10의 순서가 뒤바뀜
SELECT ROW_NUMBER()OVER(ORDER BY CASE WHEN split_part(IP,'.',3)='10'
THEN 1 ELSE 2 END , IP)NUM, IP
FROM T

2. split_part로 '.'구분자로 나눈뒤 lpad로 3자씩 채워 정렬진행
SELECT NUM, IP
FROM(SELECT ROW_NUMBER()OVER(ORDER BY CASE WHEN split_part(IP,'.',3)='10'
THEN 1 ELSE 2 END , IP)NUM,IP
FROM T) A
ORDER BY LPAD(Split_part(IP,'.',1),3,'0'), LPAD(split_part(IP,'.',3),3,'0')

출처 : http://www.gurubee.net/lecture/2195
[퀴즈] IP 목록 정렬하기
이번 퀴즈로 배워보는 SQL 시간에는 IP 목록을 정렬하는 쿼리를 어떻게 작성하는지에 대해 알아본다. 지면 특성상 문제와 정답 그리고 해설이..
www.gurubee.net
'DataBase > 구루비SQL Quiz' 카테고리의 다른 글
| [Oracle] 경우의 수 구하기 (0) | 2024.04.16 |
|---|---|
| [PostgreSQL]연속된 날짜를 하나의 그룹으로 표현 (0) | 2023.09.21 |
| [PostgreSQL]분석함수 사용하지 않고 rank 쿼리 사용 (0) | 2023.08.28 |
| [Vertica]사원의 급여 합계 및 평균 (0) | 2023.08.28 |
| [PostgreSQL]스터디가입현황 (0) | 2023.08.24 |