본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] Hacker Rank - THE PADS

by kime2 2024. 6. 4.
출처

 

문제

  1. OCCUPATIONS 에 있는 모든 이름의 알파벳순 목록을 쿼리하고 바로 뒤에 각 직업의 첫 글자를 괄호로 묶습니다(예: 괄호로 묶음). 예: , ,  . AnActorName(A)ADoctorName(D)AProfessorName(P)ASingerName(S)
  2. OCCUPATIONS 에서 각 직업의 발생 횟수를 쿼리합니다 . 발생 항목을 오름차순 으로 정렬 하고 다음 형식으로 출력합니다.
    여기서 는 OCCUPATIONS[occupation_count] 에서 직업의 발생 횟수이고  소문자 직업 이름 입니다 . 동일한 직업이 두 개 이상일 경우 알파벳순으로 정렬해야 합니다.[occupation][occupation_count]

문제에 대한 해석

- 쿼리1 : 이름 + (직업의 첫글자)를 출력하고 이름 순으로 오름차순 정렬

- 퀴리2 : 각 직업의 개수를 세서There are a total of [occupation_count] [occupation]s.으로 출력

 

풀이(MYSQL)

select 
    CONCAT(Name,'(', SUBSTR(OCCUPATION,1,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;

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

select 
    CONCAT(Name,'(', SUBSTR(OCCUPATION,1,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;

  1. FROM 절: OCCUPATIONS테이블에서
  2. SELECT 절
    •  SUBSTR함수를 사용하여 OCCUPATION의 첫글자를 출력
    • CONCAT 함수를 사용하여 Name +( + OCCUPATION의 첫글자 + )를 합쳐라
  3. ORDER BY 절:  Name 오름차순
  4. 결과반환

  1. FROM 절: OCCUPATIONS테이블에서
  2. Group by절 : OCCUPATION을 기준으로 
  3. SELECT 절
    •  COUNT함수를 사용하여 OCCUPATION의 수를 집계하고
    • CONCAT 함수를 사용하여 There are a total of  + OCCUPATION의 수 + OCCUPATION의 소문자 + s.)를 합쳐라
  4. ORDER BY 절:  OCCUPATION의 수, OCCUPATION의 오름차순
  5. 결과반환

 

배운점

  • CONCAT(TEXT1,TEXT2) - TEXT1과 TEXT2의 문자열을 합치는 함수
  • SUBSTR(컬럼,몇번째에서,어디까지)
  • 문제의 예시를 잘 보라 -> 띄어쓰지, 추가 글자