본문 바로가기

SQL - Mysql & Oracle/SQL 실전 코딩 테스트

[MySQL] HackerRank - The Report 해답 및 오답 노트

반응형

오늘은 Hacker Rank 중에서 The Report 문제에 대한 간단한 번역과 해답에 대해서 요약하고자 한다. 해설은 MySQL과 Oracle에서 모두 작동하는 것으로 기록했고, 문제 풀이 과정에서 얻었던 내용을 오답노트로 기록하였다.

 

목차

1. 문제 출처 및 소개

2. 문제의 해답

3. 오답노트

     

    1. 문제 출처 및 소개

     

    Hackerrank The Report 해설
    Hackerrank The Report 문제 화면

     

    • 문제의 요구 사항 정리
      • 요구사항 1. Name, Grade, 그리고 Mark 순으로 Column을 반환
      • 요구사항 2. Grade가 8 미만인 학생들의 이름은 'NULL"로 호출
      • 요구사항 3. 순서는 Grade 내림차순, 이름의 알파벳 오름차순으로 정렬할 것

     

     

    2. 문제의 해답

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT CASE WHEN b.Grade >= 8 THEN a.Name 
                WHEN b.Grade < 8 THEN 'NULL'
            END AS name
        , b.Grade
        , a.Marks
    FROM Students a
    JOIN Grades b on a.Marks BETWEEN b.Min_Mark and b.Max_Mark
    ORDER BY b.Grade DESC, a.Name ASC
    ;
     
    cs

     

    문제 풀이 공략은 Student과 Grades Table을 JOIN 한 다음에 이름에 대한 전처리를 진행하는 것이었다. 조건 별로 다른 값을 호출해야 했기 때문에 CASE WHEN문을 활용하여 정답을 낼 수 있도록 유도하였다. 마지막으로 정렬 순서는 문제에서 요구한 대로 작성하여 문제를 풀어낼 수 있었다. 또한 이 해답은 MySQL과 Oracle 환경에서 모두 작동하니 자유롭게 활용해도 괜찮다.

     

     

     

    3. 오답노트 - Lesson & Learn

     

    사실 이 문제를 풀어낼 때 개인적으로 삽질을 하면서 시작하여 난이도가 쉽게 느껴지지만은 않았다. 개인적으로 겪었던 어려움과 이 문제에서 배워나갈 수 있는 Point로 생각되는 것들을 정리해보고자 한다. 

     

    • Lesson1. JOIN할 때 범위 값으로 할 수 있다.
      • 개인적으로 어려움을 겪었던 내용이다. 실무에서는 거의 매번 key값을 기준으로 join을 했기 때문에 단순히 범위로 JOIN을 해도 된다는 사실을 떠올리지 못해서 헤매었었다. 
      • 코딩 테스트의 경우 다른 유형에서도 이런 상황을 볼 수 있으니 이번 오답노트를 통해서 기억하고자 한다. 
    • Lesson2. 조건 별로 다른 값을 요구하면 CASE WHEN 문을 활용해보자
      • 이 함수는 거의 매일 쓰다시피 하는 문장이기 때문에 만약 이 조건을 몰랐다면 이번 기회에 학습을 하면 좋을 내용으로 보인다.

     

     

     

     

     

     

    반응형