-
SELECT - 가장 큰 물고기 10마리 구하기코테 2024. 4. 19. 22:56728x90
문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다.
FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은
각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
Column name Type Nullable ID INTEGER FALSE # 물고기 ID FISH_TYPE INTEGER FALSE # 물고기 종류 LENGTH FLOAT TRUE # 물고기 길이 TIME DATE FALSE # 잡은 날짜
단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.
문제
FISH_INFO 테이블에서 가장 큰 물고기 10마리의 ID와 길이를 출력하는 SQL 문을 작성해주세요.
결과는 길이를 기준으로 내림차순 정렬하고, 길이가 같다면 물고기의 ID에 대해 오름차순 정렬해주세요.
단, 가장 큰 물고기 10마리 중 길이가 10cm 이하인 경우는 없습니다.
ID 컬럼명은 ID, 길이 컬럼명은 LENGTH로 해주세요.
풀이
SELECT ID, LENGTH # ID,LENGTH 컬럼을 선택(컬럼명 자체가 ID,LENGTH이기 때문에 별도로 변경하지 않음) FROM FISH_INFO # FISH_INFO 테이블에서 WHERE LENGTH > 10 # LENGTH 가 10 이상 ORDER BY LENGTH DESC, ID ASC # 10cm 이상이면 LENGTH를 기준으로 내림차순, 길이가 같으면 ID를 기준으로 오름차순 LIMIT 10; # 가장 큰 물고기 10마리
코테를 풀면서 ORDER BY에 대하여 의문이 들었다. ORDER BY LENGTH DESC, ID ASC 에서 길이를 기준으로 내림차순 하는것은 이해가 됐는데 , 길이가 같다는 조건이 쿼리문 내에 따로 적혀있지 않은데 어떻게 오름차순으로 정렬이 되는거지 ,, 라고 생각이 들어서 검색해보았다..!
- ASC 및 DESC: ASC는 오름차순(기본값), DESC는 내림차순으로 정렬한다. 기본적으로 ASC로 정렬되지만 DESC를 명시하여 내림차순으로 정렬할 수 있다.
- 여러 열 기준으로 정렬: ORDER BY 절에서는 여러 열을 지정하여 정렬할 수 있다. 먼저 첫 번째 열로 정렬한 후, 동일한 값이 있는 경우에만 두 번째 열을 기준으로 정렬한다. 이는 두 번째 열은 첫 번째 열의 값이 동일한 경우에만 적용된다.
- NULL 처리: NULL 값은 기본적으로 가장 낮은 값으로 취급되며, ASC로 정렬할 때는 가장 먼저 나타난다. DESC로 정렬할 때는 가장 마지막에 나타난다.
- 함수 및 표현식 사용: ORDER BY 절에는 열 이름 뿐만 아니라 함수나 표현식도 사용할 수 있다. 이를 통해 정렬 시 특정 조건에 따라 결과를 정렬할 수 있다.
SQL 문법에 대하여 한번 더 정리해보아야겠다고 생각이 들어서 일반적으로 SQL 쿼리를 작성할 때의 순서에 대하여 한번 정리해보았다.
- SELECT: 원하는 열(칼럼)을 선택한다. 반환할 데이터의 형태를 결정한다.
- FROM: 데이터를 추출할 테이블(또는 뷰)을 지정한다.
- WHERE: 선택한 테이블에서 특정 조건을 만족하는 행(레코드)을 찾는다. 선택적인 부분
- GROUP BY: 그룹별로 데이터를 집계하고자 할 때 사용한다.
- HAVING: GROUP BY 절과 함께 사용되며, 특정 조건을 만족하는 그룹을 선택한다.
- ORDER BY: 결과를 정렬할 때 사용한다.
- LIMIT: 결과로 반환할 행의 수를 제한할 때 사용한다. (MySQL, PostgreSQL에서 사용 가능)
간단한 쿼리의 경우 WHERE나 ORDER BY 없이도 동작할 수 있으며 또한, 특정 상황에 따라 조건절이나 정렬이 먼저 적용되는 경우도 있을 수 있다.
728x90'코테' 카테고리의 다른 글
IS NULL - 경기도에 위치한 식품창고 목록 출력하기 (0) 2024.04.24 SELECT - 잔챙이 잡은 수 구하기 (0) 2024.04.23 IS NULL - 잡은 물고기의 평균 길이 구하기 (0) 2024.04.22 SUM, MAX, MIN - 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (0) 2024.04.21 String, Date - 한 해에 잡은 물고기 수 구하기 (0) 2024.04.20