[SQL 문제 풀이] 언어별 개발자 분류하기

프로그래머스 (276036)
Stupefyee's avatar
Feb 06, 2025
[SQL 문제 풀이] 언어별 개발자 분류하기
notion image
notion image

내가 작성한 쿼리

💡
-- 💡 GRADE_TEMP: 각 스킬별 총 코드 값을 계산하여 임시 테이블 생성 WITH GRADE_TEMP AS ( -- Front End 기술의 모든 코드 값을 합산 SELECT SUM(CODE) AS TOTAL, 'FRONT' AS SKILL FROM SKILLCODES WHERE CATEGORY = 'Front End' UNION ALL -- C# 기술의 코드 값을 가져옴 (C#은 단일 코드값을 가짐) SELECT CODE AS TOTAL, 'CS' AS SKILL FROM SKILLCODES WHERE NAME = 'C#' UNION ALL -- Python 기술의 코드 값을 가져옴 (Python도 단일 코드값을 가짐) SELECT CODE AS TOTAL, 'PYTHON' AS SKILL FROM SKILLCODES WHERE NAME = 'Python' ), -- 💡 GRADE_TABLE: GRADE_TEMP 테이블에서 각 기술의 총 코드 값을 하나의 행으로 정리 GRADE_TABLE AS ( SELECT MAX(CASE WHEN SKILL = 'FRONT' THEN TOTAL END) AS FRONT, -- Front End 총 코드 값 MAX(CASE WHEN SKILL = 'CS' THEN TOTAL END) AS CS, -- C# 코드 값 MAX(CASE WHEN SKILL = 'PYTHON' THEN TOTAL END) AS PYTHON -- Python 코드 값 FROM GRADE_TEMP ), -- 💡 GRADE_STATISTICS: 개발자의 SKILL_CODE와 GRADE_TABLE을 비교하여 등급을 매김 GRADE_STATISTICS AS ( SELECT CASE -- A 등급: Front End 기술과 Python 기술을 모두 보유한 경우 WHEN (D.SKILL_CODE & G.FRONT) > 0 AND (D.SKILL_CODE & G.PYTHON) > 0 THEN 'A' -- B 등급: C# 기술을 보유한 경우 WHEN (D.SKILL_CODE & G.CS) > 0 THEN 'B' -- C 등급: Front End 기술을 보유한 경우 (단, Python이 없어야 함) WHEN (D.SKILL_CODE & G.FRONT) > 0 THEN 'C' END AS GRADE, D.ID, -- 개발자의 ID D.EMAIL -- 개발자의 EMAIL FROM DEVELOPERS AS D CROSS JOIN GRADE_TABLE AS G -- 모든 개발자에게 GRADE_TABLE을 결합 ) -- 💡 최종 결과: NULL이 아닌 GRADE를 가진 개발자 정보 조회 SELECT GRADE, ID, EMAIL FROM GRADE_STATISTICS WHERE GRADE IS NOT NULL -- GRADE가 존재하는 개발자만 출력 ORDER BY GRADE ASC, ID ASC; -- GRADE 오름차순 정렬 후, 같은 등급에서는 ID 오름차순 정렬
Share article

stupefyee