새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/SQL

[HackerRank] The PADS

by 언호 2022. 1. 2.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

결과가 특정 문자들과 함께 출력이 되어야 하므로 CONCAT 을 사용

서로 다른 결과를 출력하는 서브 쿼리를 합쳐야 하기에 UNION 하여 두개의 테이블을 합치는 방식으로 접근

 

초기에 각 서브쿼리의 결과를 정렬을 한 후 UNION 을 시도하였으나 UNION 을 실행하면 정렬된 결과들이 정렬되지 않은 상태로 테이블이 합쳐져서 결과로 나타나게 됨

문제를 해결하려 여러 방법을 시도하였으나, 세심한 정렬이 어려움

 

SQL 쿼리문을 두개를 만들어 각자 출력하는 방식으로 접근

2) 풀이 코드

사용 언어 - MySQL

SELECT CONCAT(name, "(", SUBSTR(occupation, 1, 1), ")")        -- CONCAT 함수를 이용해 특정 문자와 결과값을 같이 합쳐서 출력, SUBSTR 함수를 이용하여 데이터에서 필요한 부분만 추출
FROM occupations
ORDER BY name;                                                 -- 이름순으로 정렬

SELECT CONCAT("There are a total of ", COUNT(name), " ", LOWER(occupation), "s.")    -- 특정 문자와 같이 출력 위해 CONCAT 사용, 데이터를 소문자만 출력하기 위해 LOWER 함수 사용
FROM occupations
GROUP BY occupation                                            -- 그룹화
ORDER BY COUNT(name), occupation;                              -- 정렬

📝 결과 및 학습한 내용

1) 어려웠던 내용

두개의 테이블을 열로 합치기 위해(테이블 아래로 추가)  UNION (합집합) 을 사용하였으나, 서브쿼리를 정렬한 후 합집합을 시도하였을때, 정렬이 다시 풀리는 현상이 발생하여 정렬에 어려움을 겪음

(1) 참고 사이트

  • 블로그
    서브쿼리를 중첩하여 정렬을 시도, 정렬이 이루어지지 않음
  • 블로그
    UNION 의 결과값을 기준으로 하나의 정렬을 시도하였으나 원치 않은 결과 발생
    문제에서 원하는 정렬은 각각의 테이블을 정렬 후 합치는것지만, 위 방식은 합쳐진 결과를 토대로 정렬하기에 차이가 발생

2) 새롭게 학습한 내용

UNION 사용시 정렬했던 서브쿼리의 결과가 의미가 없어지게 됨

UNION 사용시 DBMS 내부에서 정렬이 발생하여 원치 않은 결과가 발생할 수 있다.


🔗 문제 링크

- https://www.hackerrank.com/challenges/the-pads/problem

 

The PADS | HackerRank

Query the name and abbreviated occupation for each person in OCCUPATIONS.

www.hackerrank.com

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

댓글