Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

forest_moon

[hackerrank, SQL]The Report 본문

알고리즘

[hackerrank, SQL]The Report

rokga 2023. 2. 8. 14:57

학생 등급과 이름순 정렬

 

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)
조건 
Students 테이블은 학생 정보, Grades 테이블은 점수 별 등급과 최소 점수, 최대 점수

1.Ketty는 8점 미만의 학점을 받은 학생의 NAMES를 원하지 않습니다. 
2.보고서는 성적별로 내림차순으로 정렬되어야 합니다. 즉, 높은 성적이 먼저 입력됩니다.
3.같은 학년(8-10)을 받은 학생이 두 명 이상인 경우 특정 학생의 이름을 알파벳순으로 정렬합니다.
4.마지막으로 등급이 8 미만인 경우 "NULL"을 이름으로 사용하고 등급별로 내림차순으로 나열합니다
5.같은 등급(1-7)을 가진 학생이 둘 이상인 경우 해당 학생을 점수별로 오름차순으로 정렬합니다.
출력할 항목은 이름 / 등급 / 점수 순

 

SELECT
    CASE
        WHEN grades.grade >= 8 THEN students.name
        ELSE NULL
    END,
    grades.grade,
    students.marks
FROM
    students
JOIN grades ON
    students.marks BETWEEN grades.min_mark AND grades.max_mark
ORDER BY
    grades.grade  DESC,
    students.name ASC
;

 

우선 Students와 Grades 의 데이터를 조회하고

JOIN중 BETWEEN 조건을 JOIN , 내림차순 , 오름차순 정렬 

조건에 따라서 값을 지정 CASE

 

**CASE, WHEN,ELSE, BETWEEN

 

**BETWEEN

JOIN절에 조건으로 between을 사용하는 부분이 매우 생소했다

기존에 join절 사용할때는 key 조건만 봤는데 BETWEEN을 사용했음

이러한 방법도 있다는걸 공부~

 

'알고리즘' 카테고리의 다른 글

양꼬치  (0) 2023.02.09
특정 문자 제거하기  (0) 2023.02.09
[hackerrank, SQL]African Cities  (0) 2023.02.08
[hackerrank, SQL]Average Population of Each Continent  (0) 2023.02.07
짝수 홀수 개수  (0) 2023.02.05