Contents
내가 작성한 쿼리

내가 작성한 쿼리
-- 💡 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