SQL/GROUP BY

[프로그래머스 SQL] Lv.4 - 언어별 개발자 분류하기

이런개발 2025. 4. 10. 09:31

https://school.programmers.co.kr/learn/courses/30/lessons/276036

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 풀이

  1. DEVELOPERS 테이블과 SKILLCODES 테이블을 조인한다. 이때 ON 조건에 CODE와 SKILL_CODE를 AND 연산하면 SKILL_CODE에 해당하는 모든 CODE를 가져올 수 있다.
  2. ID와 EMAIL을 기준으로 그룹핑한다. 이때 아무런 GRADE를 가지고 있지 않은 행이 있을 수 있기 때문에 HAVING절에서 필터링해준다.
  3. GRADE와 ID, EMAIL을 조회한다. GRADE는 GROUP_CONCAT 키워드를 사용해서 그룹핑된 행끼리 CATEGORY와 NAME을 합친 문자열을 기준으로 LIKE와 함께 A, B 또는 C인지 판단한다.
  4. GRADE와 ID를 기준으로 오름차순 정렬한다.
SELECT
    CASE
        WHEN GROUP_CONCAT(S.CATEGORY) LIKE '%Front End%' AND
             GROUP_CONCAT(S.NAME) LIKE '%Python%' THEN "A"             
        WHEN GROUP_CONCAT(S.NAME) LIKE '%C#%' THEN "B" 
        WHEN GROUP_CONCAT(S.CATEGORY) LIKE '%Front End%' THEN "C"
    END AS GRADE,
    D.ID,
    D.EMAIL
FROM
    DEVELOPERS AS D
        JOIN SKILLCODES AS S ON D.SKILL_CODE & S.CODE
GROUP BY
    ID, EMAIL
    HAVING GRADE IS NOT NULL
ORDER BY
    1, 2