ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SELECT - 가장 큰 물고기 10마리 구하기
    코테 2024. 4. 19. 22:56
    728x90

    문제 설명 

     

    낚시앱에서 사용하는 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 에서 길이를 기준으로 내림차순 하는것은 이해가 됐는데 , 길이가 같다는 조건이 쿼리문 내에 따로 적혀있지 않은데 어떻게 오름차순으로 정렬이 되는거지 ,, 라고 생각이 들어서 검색해보았다..!

     

    1. ASC 및 DESC: ASC는 오름차순(기본값), DESC는 내림차순으로 정렬한다. 기본적으로 ASC로 정렬되지만 DESC를 명시하여 내림차순으로 정렬할 수 있다.
    2. 여러 열 기준으로 정렬: ORDER BY 절에서는 여러 열을 지정하여 정렬할 수 있다. 먼저 첫 번째 열로 정렬한 후, 동일한 값이 있는 경우에만 두 번째 열을 기준으로 정렬한다. 이는 두 번째 열은 첫 번째 열의 값이 동일한 경우에만 적용된다.
    3. NULL 처리: NULL 값은 기본적으로 가장 낮은 값으로 취급되며, ASC로 정렬할 때는 가장 먼저 나타난다. DESC로 정렬할 때는 가장 마지막에 나타난다.
    4. 함수 및 표현식 사용: ORDER BY 절에는 열 이름 뿐만 아니라 함수나 표현식도 사용할 수 있다. 이를 통해 정렬 시 특정 조건에 따라 결과를 정렬할 수 있다.

    SQL 문법에 대하여 한번 더 정리해보아야겠다고 생각이 들어서 일반적으로 SQL 쿼리를 작성할 때의 순서에 대하여 한번 정리해보았다.

    1. SELECT: 원하는 열(칼럼)을 선택한다. 반환할 데이터의 형태를 결정한다.
    2. FROM: 데이터를 추출할 테이블(또는 뷰)을 지정한다.
    3. WHERE: 선택한 테이블에서 특정 조건을 만족하는 행(레코드)을 찾는다. 선택적인 부분
    4. GROUP BY: 그룹별로 데이터를 집계하고자 할 때 사용한다.
    5. HAVING: GROUP BY 절과 함께 사용되며, 특정 조건을 만족하는 그룹을 선택한다.
    6. ORDER BY: 결과를 정렬할 때 사용한다.
    7. LIMIT: 결과로 반환할 행의 수를 제한할 때 사용한다. (MySQL, PostgreSQL에서 사용 가능)

    간단한 쿼리의 경우 WHERE나 ORDER BY 없이도 동작할 수 있으며 또한, 특정 상황에 따라 조건절이나 정렬이 먼저 적용되는 경우도 있을 수 있다.

    728x90
Designed by Tistory.