SQL을 사용하다 보면 보통은 숫자값을 집계하는 경우가 많은데, SQL의 좋은 점은 문자를 활용해서 깔끔한 형태의 문장을 만들 수도 있다는 점이다.
문제를 바로 풀어보자. (문제 바로가기)
오늘 활용할 테이블 'OCCUPATIONS'이다. 이 테이블의 경우 사람의 이름과, 그 사람의 직업이 적힌 간단한 데이터셋이다.
이 테이블을 활용해 다음과 같은 문장을 만들어보고자 한다.
- 첫 번째로는 사람 이름 옆에 그 사람의 직업의 이니셜을 괄호로 붙여 출력하고 싶다.
예를 들어, 이름은 'Everly' 이고, 직업은 'Data Scientist'라면 "Everly(D)" 로 출력한다.
(단, 순서는 이름 알파벳순으로 한다.) - 두 번째로는 각 직업에 해당하는 사람 수가 몇 명인지 세어 문장 형태로 출력하고 싶다.
예를 들어, Actors는 4명, Singer는 7명이라면
"There are a total of 4 actors.", "There are a total of 7 singers" 라고 출력한다.
(단, 순서는 사람 수가 작은 순서대로 하며, 사람 수가 동일한 경우 직업 이름 알파벳순으로 한다. 직업 이름은 소문자로 쓴다.)
다음과 같이 말이다.
SQL 쿼리 답안
먼저 첫 번째 문장부터 만들어보자. 이 경우 이름(NAME)과, 직업(OCCUPATION) 열의 첫 이니셜을 가져와서 괄호로 묶어야 한다.
이렇게 문자열을 합칠 경우엔 CONCAT 이라는 SQL 함수를 사용하면 좋다. (다양한 SQL 함수 설명 바로가기)
-- 예를 들어 '대한민국만세'를 출력하고자 한다면
SELECT CONCAT('대한', '민국', '만세')
CONCAT은 공백없이 붙여주기 때문에 공백을 만들어주고 싶다면 ' ' 와 같이 공백을 함께 써줘야 한다.
아무튼 문제를 풀어보면 다음과 같이 쿼리를 짤 수 있을것이다.
SELECT CONCAT(NAME, '(', LEFT(OCCUPATION, 1), ')')
FROM OCCUPATIONS
ORDER BY NAME;
이번엔 두 번째 문장을 만들어보자. 이 문장의 경우엔 다음과 같은 형식으로 문장을 출력해야 한다고 했다.
There are a total of [occupation_count] [occupation]s.
CONCAT을 활용하면 'There are a total of ' 라는 문장과, "직업에 해당하는 사람 수", "직업명" 마지막으로 's.' 를 붙이면 된다.
그리고 직업에 해당하는 사람 수는 테이블에서 직업의 개수를 세면 된다.
직업명은 반드시 소문자로 하라고 했으므로 LOWER 함수를 사용한다.
SELECT CONCAT('There are a total of ', COUNT(OCCUPATION), ' ', LOWER(OCCUPATION), 's.')
FROM OCCUPATIONS
GROUP BY OCCUPATION
ORDER BY COUNT(OCCUPATION), OCCUPATION;
위와 같은 쿼리를 만들면 깔끔한 문장 형태로 출력될 것이다.
단 주의점은 GROUP BY를 써야 한다는 것인데, COUNT라는 집계함수를 사용했으므로 OCCUPATION에 대해 그룹화를 시켜주어야 한다.
마지막으로 사람 수가 작은 순서대로, 그리고 직업명 알파벳 순서대로 정렬한다.
위의 두 쿼리문을 한 번에 실행하면 원하는 결과 완성!
SELECT CONCAT(NAME, '(', 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), OCCUPATION;
'Skillset > SQL' 카테고리의 다른 글
[Python, Redshift] 파이썬에 AWS Redshift 연결하여 사용하는 방법 (1) | 2022.09.19 |
---|---|
[MySQL] 문자열에서 0 제거하기 (REPLACE) (0) | 2022.08.12 |
SQL 중첩된 CASE WHEN 구문 활용: 삼각형의 타입 구분하기 (0) | 2022.08.09 |
SQL 특정 문자들로 시작 or 끝나는 도시 출력하기 (0) | 2022.08.08 |
[MySQL] 가장 짧은 글자와 가장 긴 글자에 해당하는 도시 구하기 (LENGTH) (0) | 2022.08.07 |