본문 바로가기

Study/SQL

MySQL | HackerRank | The Report

Problem

You are given two tables: Students and Grades. Students contains three columns ID, Name and Marks.

Grades contains the following data:

Ketty gives Eve a task to generate a report containing three columns: Name, Grade and Mark. Ketty doesn't want the NAMES of those students who received a grade lower than 8. The report must be in descending order by grade -- i.e. higher grades are entered first. If there is more than one student with the same grade (8-10) assigned to them, order those particular students by their name alphabetically. Finally, if the grade is lower than 8, use "NULL" as their name and list them by their grades in descending order. If there is more than one student with the same grade (1-7) assigned to them, order those particular students by their marks in ascending order.

Write a query to help Eve.

Sample Input

Sample Output

Maria 10 99
Jane 9 81
Julia 9 88 
Scarlet 8 78
NULL 7 63
NULL 7 68


Note

Print "NULL"  as the name if the grade is less than 8.

Explanation

Consider the following table with the grades assigned to the students:

So, the following students got 8, 9 or 10 grades:

  • Maria (grade 10)
  • Jane (grade 9)
  • Julia (grade 9)
  • Scarlet (grade 8)
요약하자면,
1. Students 테이블의 점수에 알맞게 Grades 테이블에 등급까지 나올 수 있도록 하라 (JOIN)
2. 등급이 8미만이라면 이름은 NULL로 표기하라
3. 등급을 내림차순으로 정렬하고, 등급이 8이며 동급일 경우 이름을 알파벳 순으로 정렬 / 등급이 8미만이며 동급일 경우 점수를 오름차순으로 정렬하라.

Solve

SELECT CASE WHEN b.Grade > 7 THEN a.Name ELSE NULL END 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, IF(b.Grade > 7, a.Name, a.Marks);
  • 등급에 따른 기준으로 이름을 나타낼지 아닐지 조건이 필요했다.
    본인의 경우 CASE WHEN THEN 문을 사용, IF 함수를 사용해도 좋다.
  • 두 테이블의 조인이 필요했고 두 테이블 모두에 값이 존재해야 했으므로 INNER JOIN처리를 해주었다.
    점수(Marks)가 min값과 max값 사이에 있는지 확인하여 등급(Grade)을 결합하는 것으로 BETWEEN AND 구문을 사용, 부등호와 AND 연산자를 사용해도 좋다.
  • 정렬하는 방법에도 등급에 따른 기준점에 따라 조건이 달랐다.
    두번의 쿼리를 작성해도 되지만, IF문을 사용하여 조건에 따른 정렬을 하도록 작성하였다.

Issue

이름, 점수, 등급으로 출력해서 계속 Wrong Answer.. 떴었다.. ^^

..바본가?


출처

https://www.hackerrank.com/challenges/the-report/problem?isFullScreen=true 

 

The Report | HackerRank

Write a query to generate a report containing three columns: Name, Grade and Mark.

www.hackerrank.com

 

'Study > SQL' 카테고리의 다른 글

MySQL | HackerRank | Top Earners  (0) 2023.02.06
MySQL | HackerRank | Top Competitors  (0) 2023.01.31
MySQL | HackerRank | The PADS  (0) 2023.01.27
MySQL | HackerRank | Weather Observation Station 20  (2) 2023.01.01
MySQL | HackerRank | New Companies  (1) 2022.11.16