📖 문제
🧑🏻💻 풀이 과정
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
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > SQL' 카테고리의 다른 글
[HackerRank] Weather Observation Station 19 (0) | 2022.01.04 |
---|---|
[HackerRank] Weather Observation Station 18 (0) | 2022.01.03 |
[프로그래머스] 이름에 el이 들어가는 동물 찾기 (0) | 2022.01.01 |
[프로그래머스] DATETIME에서 DATE로 형 변환 (0) | 2021.12.31 |
[HackerRank] Top Earners (0) | 2021.12.30 |
댓글