728x90
📚문제
📝풀이
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)
기초 풀다가 난이도가 갑자기 확 뛴 느낌
중요한 포인트는
1) CONCAT() 함수
- 문자열과 숫자의 결합도 가능 ( 숫자를 형변환하여 문자열로 정상출력 )
- 더하기 연산자 사용할 때는 CAST( a as char) 함수로 데이터 형태를 문자열로 변환시켜주어야함
+ CONCAT_WS() 함수
- 구분자로 합치기
ex) CONCAT_WS(', ', 'SQL','SERVER','2019')
-------------------------------------------
SQL, SERVER, 2019
2) LOWER() 함수
- 해당 열의 모든 값을 소문자로 변환
3) GROUP BY
- SELECT문에 GROUP BY해준 컬럼이 나와야 되는거 아닌가 했는데
이미 그룹화가 되어있기 때문에
바로 COUNT 함수가 나와도 가능하다
+ PCSQL대비로 다시 풀었는데
푼 기억이 전혀 안 났었다
아마 다른 코드를 보고 참고해서 그런것같다
SELECT CONCAT(Name, '(', LEFT(Occupation,1), ')') AS name
FROM OCCUPATIONS o1
ORDER BY name;
(SELECT 'There are a total of'
, (SELECT COUNT(Occupation)
FROM OCCUPATIONS
WHERE Occupation = 'doctor') AS cnt
, CONCAT(' ', 'doctor', 's.') AS name)
UNION
(SELECT 'There are a total of'
, (SELECT COUNT(Occupation)
FROM OCCUPATIONS
WHERE Occupation = 'singer') AS cnt
, CONCAT(' ', 'singer', 's.') AS name)
UNION
(SELECT 'There are a total of'
, (SELECT COUNT(Occupation)
FROM OCCUPATIONS
WHERE Occupation = 'actor') AS cnt
, CONCAT(' ', 'actor', 's.') AS name)
UNION
(SELECT 'There are a total of'
, (SELECT COUNT(Occupation)
FROM OCCUPATIONS
WHERE Occupation = 'professor') AS cnt
, CONCAT(' ', 'professor', 's.') AS name)
ORDER BY cnt, name
훨씬 복잡하게 풀긴했지만..
그래도 참고없이 혼자 푼 거니까 기록해놓기
처음 코드처럼 푸는 방법도 기억해두자
728x90
'SQL > HackerRank (SQL문풀)' 카테고리의 다른 글
Advanced Select / Occupations / MySQL (0) | 2023.11.21 |
---|---|
Hackerrank / Advanced Join / Symmetric Pairs / MySQL (0) | 2023.10.20 |
Hackerrank / Advanced Join / Placements / MySQL (0) | 2023.10.19 |
HackerRank / Basic Join / The Report / MySQL (0) | 2023.10.10 |
HackerRank / Basic Select / Weather Observation Station 5 / MySQL (1) | 2023.10.04 |