본문 바로가기
데이터/SQL 문제풀이

HackerRank SQL - Higher Than 75 Marks

by 찌노오 2022. 11. 1.

 

 

Query the Name of any student in STUDENTS who scored higher than  Marks. Order your output by the last three characters of each name. If two or more students both have names ending in the same last three characters (i.e.: Bobby, Robby, etc.), secondary sort them by ascending ID.

Input Format

The STUDENTS table is described as follows: 

 The Name column only contains uppercase (A-Z) and lowercase (a-z) letters.

Sample Input

Sample Output

Ashley
Julia
Belvet

Explanation

Only Ashley, Julia, and Belvet have Marks > . If you look at the last three characters of each of their names, there are no duplicates and 'ley' < 'lia' < 'vet'.

Problem

점수가 75점보다 높으면서 마지막 문자 3개를 이름으로 묶어 정렬하라.

단, 이름은 마지막 3개 기준 내림차순, ID는 오름차순으로 정렬


Answer

SELECT name
  FROM STUDENTS
 WHERE Marks > 75
ORDER BY RIGHT(name, 3), ID ASC

 


How to solve

처음에 문제를 잘못이해하고 마지막 문자 3개를 묶어서 첫번째 이름만 반환하라는 건 줄 알았다.

그래서 서브쿼리를 안쓰고 어떻게 하지라는 생각에 물음표로 가득찼다. 그리고 수십번의 시도 끝에 잘못 이해한 걸 인지하고 다시 고쳤다.

 

문자열 함수는 엑셀과 유사하다.

 

RIGHT(str, len)

  •  문자열(str)의 가장 오른쪽에서 부터 len만큼 문자 반환
SELECT RIGHT('ABCDEF',3);
       -> 'DFF'

 

LEFT(str, len)

  •  문자열(str)의 가장 왼쪽에서 부터 len만큼 문자 반환
SELECT LEFT('ABCDEF',3);
       -> 'ABC'

 

MID(str,pos,len)

  •  문자열(str)의 특정 위치(pos)에서부터 len만큼 반환
SELECT MID('ABCDEF',3,3);
       -> 'CDE'

※ SUBSTRING 함수로 대체할 수 있다.

 

반응형

댓글