먼지뭉치 Data Analysis

[HackerRank] The PADS 안됐던 이유 정리 본문

SQL

[HackerRank] The PADS 안됐던 이유 정리

데이터분석과 개발 2025. 3. 14. 10:22

안녕하세요!

 

오늘은 해커랭크의 The PADS 라는 문제를 풀어보고 느낀점을 간단하게 정리해보려 합니다.

정말 쉬워보이는데 왜 안되는 거지?를 생각하며 해결하는데 정말 오래 걸렸던 문제인데요.

(알파벳 실수한건가 싶어 20번은 제출했던 거 같네요,,)

문제를 간단히 요약하면 아래와 같습니다.

Q. Occupation 테이블에서 다음과 같은 결과를 도출하세요

 

occupation 테이블

 

Output값

 

Soultion

쿼리 자체는 쉬운 편이었고 아마 예상컨데 다들 저같이 'Union all'을 사용해 답안을 제출하셨지 않나 싶네요.

저도 같은 답만 10번 이상 제출했던 것 같습니다..

# 틀린 답
(   SELECT CONCAT(NAME,'(',LEFT(OCCUPATION,1),')')
    FROM OCCUPATIONS
    ORDER BY NAME
)
UNION ALL
(   SELECT CONCAT('There are a total of ',COUNT(*),' ',LOWER(OCCUPATION),'s.')
    FROM OCCUPATIONS 
    GROUP BY OCCUPATION
    ORDER BY COUNT(OCCUPATION),OCCUPATION
)

 

결론은 'Union all을 사용할 수 없다'입니다. 왜일까요?

 

두개의 테이블의 컬럼개수와 데이터 타입이 달라서 그렇다고 합니다. 첫번째 테이블의 경우 단순 개별 행들을 반환하는 반면, 두번째 테이블의 경우 group by를 이용한 집계 데이터를 나타내기 때문에 그렇다고 합니다.

 

그래서 그냥 2개의 쿼리를 작성한다고 생각하고 따로 적어주시면 됩니다.

(첫번째 쿼리 끝날 때 세미콜론(;) 까먹으면 안됩니다! )

 

# MYSQL 정답 코드
SELECT CONCAT(NAME,'(',LEFT(OCCUPATION,1),')')
FROM OCCUPATIONS
ORDER BY NAME;

SELECT CONCAT('There are a total of ',COUNT(*),' ',LOWER(OCCUPATION),'s.')
FROM OCCUPATIONS 
GROUP BY OCCUPATION
ORDER BY COUNT(OCCUPATION),OCCUPATION;

 

사실 이런 문제들이 현업에 도움이 될까? 가끔 생각은 들지만 있는 문제 없는 문제 다 풀어보려고 합니다.

가끔 잊어먹었던 문법들이 생각나기도 하고 여러가지로 도움이 되는 것 같습니다.

 

오늘도 좋은 하루 보내세요 감사합니다.