본문 바로가기

SQL/[HackerRank]

[HackerRank/MySQL] The PADS

728x90

< Problem >

1. '이름(직업 맨 앞글자)' 형태로 이름을 오름차순으로 출력

2. 'There are a total of [occupation_count] [occupation]s.' 형태로 직업을 가진 사람의 수를 오름차순으로 출력

링크:  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


< Code >

* LIMIT 100은 데이터 양을 모르기 때문에 임의로 선택한 숫자임.

(SELECT CONCAT(name, '(', LEFT(occupation, 1), ')')
FROM occupations
ORDER BY name ASC
LIMIT 100)
UNION ALL
(SELECT CONCAT('There are a total of ', COUNT(occupation), ' ', LOWER(occupation), 's.')
FROM occupations
GROUP BY occupation
ORDER BY COUNT(occupation) ASC, occupation ASC
LIMIT 100)

 

(SELECT CONCAT(name, '(', LEFT(occupation, 1), ')')
FROM occupations
ORDER BY name ASC
LIMIT 100)
UNION
(SELECT CONCAT('There are a total of ', COUNT(occupation), ' ', LOWER(occupation), 's.')
FROM occupations
GROUP BY occupation
ORDER BY COUNT(occupation) ASC, occupation ASC
LIMIT 100)

 

< Lesson & Learned >

SELECT 문 (조건검색)

SELECT: 키워드와 함께 검색하고 싶은 속성의 이름을 나열

CONCAT( ): 여러 문자열이나 칼럼을 합쳐줌. 띄어쓰기 없음.

FROM: 키워드와 함께 검색하고 싶은 속성이 있는 데이블의 이름을 나열

ORDER BY: 결과 테이블 내용을 원하는 순서로 출력. 오름차순(기본): ASC, 내림차순: DESC

LIMIT a: 첫번째 행에서부터 a개 데이터를 가져옴.

LEFT(A, B): A의 왼쪽에서부터 B개의 글자를 가져옴.

UNION: 두 개의 쿼리를 연속으로 추력, 두 개의 쿼리가 조회하는 칼럼의 개수와 데이터의 형식이 같아야 조회가 가능함. 중복 허용시에는 UNION ALL 사용.

GROUP BY: 특정 속성의 값이 같은 투플을 모아 그룹을 만들고, 그룹별로 검색. HAVING 키워드를 이용해 그룹에 대한 조건을 작성함.

LOWER( ): 문자를 소문자로 변환함.

 

728x90