MySQL 해커랭크 | The PADS (CONCAT 함수와 '+' 연산자의 차이점, CAST, CONVERT함수)

    728x90

     

    문제

    https://www.hackerrank.com/challenges/the-pads/problem?isFullScreen=true

     

    The PADS | HackerRank

    Query the name and abbreviated occupation for each person in OCCUPATIONS.

    www.hackerrank.com

     

    • 이름 (직업 맨 앞 글자) 형식
      • 직업 맨 앞 글자 : 대문자 
      • 이름 알파벳 순으로 정렬하기
    • There are a total of occupation_count, occupations.
      • occupation_count : 직업 별 등장한 개수
      • occupation : 직업, 소문자로 적기
      • occupation_count 오름차순, occupation 오름차순 정렬하기

     

    테이블

    OCCUPATIONS

     

    풀이과정

    1
    2
    3
    4
    5
    6
    7
    8
    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), Occupation;
    cs

    두 개의 SELECT문으로 나눠서 출력 → 한 쿼리문이 모두 실행된 후, 그 다음 쿼리문 실행됨

    • 첫 번째 쿼리문의 경우, 이름(직업 첫글자 대문자) 를 출력하는 것이기 때문에
      LEFT 함수로 직업의 첫 글자를 가져오고UPPER 함수로 대문자로 만들어줌
    • 두 번째 쿼리문의 경우, 각 직업의 개수를 세줘야 하기 때문에 직업으로 GROUP BY 한 후 COUNT 해줌.
      해당 직업은 모두 소문자로 적어야 하기 때문에 LOWER 함수를 써주고, 전체 문자열을 CONCAT으로 연결해줌

     

    배운 점

    ▶ CONCAT 함수

    : 문자열 합칠 때 사용

    : 숫자와 문자가 함께 입력되어도 오류 안 남

    >> CONCAT 함수에 입력된 값은 문자형으로 변환 후 합쳐지기 때문

     

    cf. 더하기(+) 연산자

    : 문자열 합칠 때 사용

    : 문자열 + 문자열은 에러 안 남

    ↔ 문자열 + 숫자 조합은 에러 남

    : 수치형으로 변환하든, 문자형으로 변환한 후 사용 가능

     

    cf. CONCAT_WS함수 (구분자로 합치기)

    CONCAT_WS('사용할 구분자', '문자열', '문자열', ..., '문자열')


    ▶ 데이터타입 변환 함수 : CAST, CONVERT 

    CAST 함수 

    CAST(값 AS 데이터형식)

     

    CONVERT 함수

    CONVERT(값, 데이터형식[길이]))

     

    변환 가능한 데이터 형식
    TIME
    DATE
    DATETIME
    NCHAR[(N)]
    CHAR[(N)] [charset_info]  
    JSON
    BINARY[(N)]
    DECIMAL[(M[,D])]
    SIGNED [INTEGER]
    UNSIGNED [INTEGER]

     

    728x90

    댓글