문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다.
FISH_INFO 테이블의 구조는 다음과 같으며
ID, FISH_TYPE, LENGTH, TIME은 각각
잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.
FISH_INFO 테이블에서 가장 큰 물고기 10마리의 ID와 길이를 출력하는 SQL 문을 작성해주세요.
결과는 길이를 기준으로 내림차순 정렬하고, 길이가 같다면 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 가장 큰 물고기 10마리 중 길이가 10cm 이하인 경우는 없습니다.
ID 컬럼명은 ID, 길이 컬럼명은 LENGTH로 해주세요.
테스트 케이스
![]() |
![]() |
문제해설
해당 문제는 간단하게 SELECT 구절만 사용해서 해결할 수 있는 문제였다.
1. 가장 길이가 긴 물고기 10마리를 내림차순으로 정렬한다.
2. 길이가 같은 물고기의 경우, ID 값의 오름차순으로 정렬한다.
3. 10cm보다 작은 물고기의 LENGTH 컬럼은 NULL로 표시한다.
4. 상위 10마리의 물고기 중에서 길이가 10cm보다 작은 물고기는 없다.
위 네 가지 제한사항만 문제에서 파악한다면 쉽게 해결할 수 있다.
처음에는 NULL값을 배제하고자 서브쿼리로 문제를 해결하였으나,
이건 그냥 WHERE 구절 하나로도 쉽게 해결할 수 있는 문제였다.
두 가지의 모든 SQL문은 아래에 첨부한다.
정답코드
1. Sub Query문을 활용한 해결방법 (BAD)
SELECT ID, LENGTH
FROM (SELECT * FROM FISH_INFO WHERE LENGTH IS NOT NULL) as FISH
ORDER BY LENGTH desc, ID
LIMIT 10;
2. WHERE문을 활용한 해결방법 (BETTER)
SELECT ID, LENGTH
FROM FISH_INFO
WHERE LENGTH > 10
ORDER BY LENGTH desc, ID
LIMIT 10;
본 문제는
ORDER BY는 총 두 개의 컬럼을 기준으로 작성해야 하는데,
ORDER BY에서 첫 기준과 그 다음 우선순위를 갖는 컬럼을 잡을 때는,
쉼표를 기준으로 나눠주면 된다.
또한 오름차순과 내림 차순을 그저 평소와 같이
각 컬럼 기준에 맞게 컬럼 옆에 적어주면 된다.
'DataScience > SQL' 카테고리의 다른 글
[프로그래머스] 카테고리 별 도서 판매량 집계하기 - SQL (7) | 2024.11.04 |
---|---|
[PostgreSQL] SQL에서 Join 연산 개념 및 문법 정리 (INNER, RIGHT, LEFT, FULL, CROSS, SELF Join) (1) | 2024.10.22 |
[PostgreSQL] ALTER TABLE 문법 총정리 - 컬럼 추가, 이름 변경, 삭제 등 (0) | 2024.10.18 |
pymysql 오류 valueerror: unsupported format character (0) | 2024.09.27 |
[프로그래머스] MySQL 3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.09.26 |