본문 바로가기

SQL/HackerRank (SQL문풀)

Hackerrank / Advanced Select / The PADS / MySQL

728x90

📚문제

출처 : Hackerrank(https://www.hackerrank.com/challenges/the-pads/problem?isFullScreen=true)

 

📝풀이

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