SQL 데이터 분석

SQL CONCAT, SUBSTRING 문자열 함수 - 해커랭크 Hackerrank SQL The PADS 문제풀이 적용

deviz 2024. 11. 14. 22:14
반응형

SQL 코딩테스트 준비를 위해 해커랭크 문제풀이를 해보려고 합니다. 서버는 MySQL을 기준으로 설정하였으며, 문제의 핵심은 [sql 문자열 함수를 인지하고, 문자와 연결하는 함수 CONCAT]을 활용하는 것입니다. 문제 분석을 통해 정답 SQL 쿼리와 오답을 포함한 자세한 풀이 과정을 작성했습니다. SQL 코딩 능력을 키우고자 하는 분들에게 도움이 될 수 있도록 문제 해결에 필요한 사고 과정과 코드 설명을 상세히 다루었습니다. 🔥

 

 

📌 SQL 문자열 함수: CONCAT 및 SUBSTRING 정리 


1. CONCAT 함수
CONCAT 함수는 여러 개의 문자열을 하나로 결합하는 데 사용됩니다. 이 함수는 데이터베이스에서 다양한 문자열을 조합하여 새로운 문자열을 생성할 수 있게 해줍니다.

예시:
name , actor -> name (A) 

SELECT CONCAT(Name, '(', SUBSTRING(occupation, 1, 1), ')') 
FROM occupations
ORDER BY name;





2. SUBSTRING 함수
SUBSTRING 함수는 문자열의 특정 부분을 추출하는 데 사용됩니다. 이 함수는 시작 위치와 길이를 인자로 받아 해당 부분 문자열을 반환합니다.

예시 : 

occupation의 첫글자만 추출

doctor -> d

SELECT SUBSTRING(occupation, 1, 1) 
FROM occupations;





다른 문자열 함수 예시


3. LENGTH 함수
LENGTH 함수는 문자열의 길이를 반환합니다. 예를 들어, 특정 직업의 길이를 확인할 수 있습니다.

예시:

SELECT occupation, LENGTH(occupation) AS occupation_length 
FROM occupations;

 

 



4. LOWER 함수
LOWER 함수는 문자열을 소문자로 변환합니다. 이를 통해 데이터의 일관성을 유지할 수 있습니다.

예시:

SELECT LOWER(occupation) 
FROM occupations;





5. UPPER 함수
UPPER 함수는 문자열을 대문자로 변환합니다.

예시:

SELECT UPPER(Name) 
FROM occupations;




6. TRIM 함수
TRIM 함수는 문자열의 앞뒤 공백을 제거합니다.

예시:

SELECT TRIM(Name) 
FROM occupations;

 

📌 SQL 문자열 함수 활용 문제!  CONCAT 및 SUBSTRING 활용 

 


문제 : The PADS (Hackerrank SQL MySQL) 

난이도 : Medium

서버 : MySQL

테이블 이름 : OCCUPATIONS


문제 의도 : 

 

 

The PADS | HackerRank

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

www.hackerrank.com

 

 

 

 

 

문제 요약 

Input sample과 output sample 테이블을 보면 이해하기 쉽다. 

 

추출해야 할 열:   name, occupation(첫 글자만), 문장

여기서 문장은: There are a total of [occupation_count] [occupation]s. 

 

 

 

input sample

 

 

output sample

 

 

정답 sql 코드 :

SELECT CONCAT(Name, '(', SUBSTRING(occupation,1,1), ')')
FROM occupations
order by name;

SELECT CONCAT('There are a total of ', COUNT(occupation),' ',  lower(occupation), 's.')
FROM OCCUPATIONS
GROUP BY occupation
ORDER BY COUNT(occupation)

 

 

 

sql 풀이과정 : 

(나의 풀이 사고과정 정리) 

 

 

 

 

일단,
사고 과정 1 :
output sample 보는순간..음 다른 형태의 행을 어떻게 추출하지? 

UNION이나 UNION ALL 로 결합할 수 없는데..? 

-> 연달아 작성하면 끝.

 

사고 과정 2: 문자열 함수 substring이랑 concat 함수 이용해야겠다. 

 

 

 

 

따라서, 다음과 같은 코드를 실행하면 정답!

SELECT CONCAT(Name, '(', SUBSTRING(occupation,1,1), ')')
FROM occupations
order by name;

SELECT CONCAT('There are a total of ', COUNT(occupation),' ',  lower(occupation), 's.')
FROM OCCUPATIONS
GROUP BY occupation
ORDER BY COUNT(occupation)

 

반응형