반응형
*MySQL 버전, advanced select 문제입니다.
해커랭크 The PADS 문제, 샘플, 설명
💡 쿼리 2개 작성
첫 번째 쿼리: 이름(직업명 앞글자) 형식
- 이름: 알파벳 순 정렬
- 직업명: 앞글자 하나만 대문자로 가져오기
두 번째 쿼리: 포맷에 따라 직업별 카운트 및 해당 직업명 가져오기
- 직업 수 오름차순 정렬, 동일값일 경우 알파벳 순 정렬.
- 직업명: 소문자로 풀네임 가져오기
해커랭크 The PADS 답
- CONCAT
'이름(직업명), There are a total of [직업 수] [직업명] s.'처럼 특정 포맷의 결과물을 위해, 컬럼 데이터들을 합쳐야 하기에 사용.
*추천 글 MySQL CONCAT과 || 유의점, 컬럼(필드) 문자열 합치기
- UPPER, LOWER
대문자, 소문자 형식이 조건이라 사용했다.
사실 해당 문제의 원데이터를 봤을 때 직업명 앞글자가 모두 대문자였으나, 조건에 맞춰 문제를 풀고자 사용.
- LEFT
직업명 앞글자만 가져오기 위해, 왼쪽 첫 글자로 지정해서 사용.
- GROUP BY, ORDER BY
첫 번째 쿼리는 이름 알파벳순 정렬이어서 ORDER BY만 사용.
반면 두 번째 쿼리는 직업 카운트를 위해 GROUP BY, 직업 수 및 직업명 알파벳 순 정렬 필요하므로 ORDER BY 사용.
SELECT CONCAT(
name
, '('
, UPPER(LEFT(occupation, 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), LOWER(occupation);
추가 정리
문자열 추출 시 사용하는 SUBSTRING 버전
SELECT CONCAT(
name
, '('
, UPPER(SUBSTR(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), LOWER(occupation);
💡 SUBSTRING(=SUBSTR)
- 특정 문자열, 컬럼 등에서 원하는 문자를 추출할 때 사용한다.
- 추출하려는 문자열 범위(시작점~마지막점), 추출할 문자 길이를 지정해서 사용한다.
SUBSTR(문자열, 시작점, 마지막점);
SUBSTR(문자열 FROM [시작점] FOR [문자 길이]);
반응형
'SQL > HackerRank(해커랭크)' 카테고리의 다른 글
HackerRank(해커랭크) MySQL New Companies 문제 답 (0) | 2023.10.18 |
---|---|
HackerRank(해커랭크) MySQL Occupations 문제 답 (0) | 2023.10.16 |
HackerRank(해커랭크) MySQL Type of Triangle 문제 답 (1) | 2023.10.11 |
HackerRank(해커랭크) MySQL Weather Observation Station 20 문제 답 (1) | 2023.10.09 |
HackerRank(해커랭크) MySQL Weather Observation Station 19 문제 답 (2) | 2023.10.06 |