FISH_INFO 테이블에서 가장 큰 물고리 10마리의 ID와 길이 출력.
- 결과는 길이 기준 내림차순, 길이가 같다면 물고기 ID에 대해 오름차순.
- 단, 가장 큰 물고기 10마리 중 10cm이하인 경우는 없다. -> 10cm이하일 경우 LENGTH=NULL
LENGTH를 기준으로 내림차순 정렬 후 10개를 뽑았을 때 10cm 이하인 경우는 포함되지 않으나 문제 조건에 포함되어 있으므로 추가 조건을 주었다.
- 10cm 이하인 경우 LENGTH=NULL이므로 WHERE을 사용하여 IS NOT NULL 조건을 주었다.
다중정렬을 사용하여 우선 LENGTH 기준으로 내림차순 정렬 후 ID기준으로 오름차순 정렬하도록 하였다.
그 후 마지막으로 10개만 뽑도록 LIMIT를 주었다.
SELECT ID, LENGTH FROM FISH_INFO WHERE LENGTH IS NOT NULL ORDER BY LENGTH DESC, ID ASC LIMIT 10;
- WHERE조건에서 준 NOT NULL 조건의 경우 정렬 후 10개의 데이터만 뽑아보았을 때 LENGTH=NULL인 데이터가 없어 구지 WHERE 조건을 주지 않아도 정답 처리가 되지만, 문제에 더 부합한 풀이를 위해 WHERE 조건으로 NULL을 제외하여 데이터를 추출하도록 하였다.
- ASC의 경우 정렬의 기본값(오름차순)이기에 ASC로 명시하여 작성하지 않아도 자동으로 오름차순 정렬되지만 가시성을 위해 ASC를 적어주었다!
SELECT ID, LENGTH FROM FISH_INFO ORDER BY LENGTH DESC, ID LIMIT 10;
- 결과 집합을 여러 열 기준으로 정렬하기 위해서는 ORDER BY 절에 ,(쉼표)로 구분하여 정렬 조건을 부여할 수 있다.
- ORDER BY에서 다중정렬을 하는 경우 왼쪽부터 순차적으로 정렬되기에 순서를 고려하여 컬럼을 나열해야 한다!
SELECT * FROM 테이블 ORDER BY COL1 DESC, COL2 DESC;
💡 COL1기준으로 내림차순 정렬 후, COL1이 같은 값에 한해서 COL2로 내림차순 하겠다!