[SQL] 해커랭크(HackerRank) 문제풀이 3

jae.y·2022년 9월 29일
1

📝 문제

  • 문제는 HackerRank에 등록되어 있음
  • 모든 문제는 아래에 첨부한 STUDENTS, Employee 테이블 사용
  • 데이터베이스로는 MySQL을 사용


테이블 명 : STUDENTS

ColumnType
IDInteger
NAMEString
MarksInteger

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


테이블 명 : Employee

ColumnType
employee_idInteger
nameString
monthsInteger
salaryInteger

where employee_id is an employee's ID number, name is their name, months is the total number of months they've been working for the company, and salary is their monthly salary.


📍 1번 문제

Query the Name of any student in STUDENTS who scored higher than 75 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.

1) 점수가 75점보다 높은 학생의 이름을 출력
2) 정렬은 이름의 마지막 3자로 정렬한 후, 중복값이 있으면 id로 정렬 -- ASC
SELECT name
FROM students
WHERE marks > 75
ORDER BY RIGHT(name, 3), id -- name의 오른쪽 3자로 정렬 후, 중복이면 id로 정렬 

   문제 1. Higher Than 75 Marks


📍 2번 문제

Write a query that prints a list of employee names (i.e.: the name attribute) from the Employee table in alphabetical order.

: Employee 테이블에 있는 name 값을 알파벳순으로 정렬
SELECT name
FROM employee
ORDER BY name -- ORDER BY (defalt값이 ASC)

   문제 2. Employee Names


📍 3번 문제

Write a query that prints a list of employee names (i.e.: the name attribute) for employees in Employee having a salary greater than $2000 per month who have been employees for less than 10 months. Sort your result by ascending employee_id.

1) 근무기간이 10개월 미만, 월 급여가 $2000 를 넘는 직원 이름
2) 직원 ID 오름차순으로 결과 정렬
SELECT name
FROM employee
WHERE months < 10 AND salary > 2000 -- 두 조건을 만족시키기 위해 AND 사용
ORDER BY employee_id

   문제 3. Employee Salaries


🤔 느낀점

맞춰야하는 조건이 많이 없어서 아직까진 어려운 점이 없었다!
기억해야될 부분이 있다면 문자열을 자르는 방법!?

MySQL의 문자열 자르기 방법 (LEFT, RIGHT, SUBSTRING) 을 기억해두면 이름에서 성을 가져와야하는 경우, 주민등록번호에서 앞 6자리만 가져오는 방법 등에 사용할 수 있을 것이다!

🔥 배운 것 적용해 보기

  • Customer 테이블은 고객의 이름과 주민등록번호로 구성되어있음
  • 조건
    1) 이때, ******-*******로 되어있는 데이터 중 앞 6자만 가져와보기
    2) 반환할 데이터 : 이름, 생년월일

INPUT (Customer)

NameBirthNum
홍길동550202-1234567
김영희770303-1234567
김철수990404-1234567
고길동110505-1234567

CODE

SELECT Name AS "이름", LEFT(BirthNum, 6) AS "생년월일"
FROM Customer

OUTPUT

이름생년월일
홍길동550202
김영희770303
김철수990404
고길동110505

다음에는 더 복잡한 구조의 데이터를 수집하고, 조건에 맞게 추출, 분석해보는 연습을 해봐야겠다!

profile
데이터 분린이 :)

0개의 댓글