프로그래머스 LV.4 / 언어별 개발자 분류하기 (SQL)

2025. 3. 17. 12:25·코딩 알고리즘 스터디

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

- 변수

  • SKILLCODES 테이블

  • DEVELOPERS 테이블

 

DEVELOPERS의 SKILL_CODE가 400 (=b'110010000')이면, SKILLCODES의 CODE에 해당하는 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 스킬을 가졌다는 것을 의미

 

- 결과

GRADE를 다음과 같이 만들고, GRADE, ID, EMAIL 조회

A : Front End와 Python 스킬를 가진 개발자
B : C# 스킬을 가진 개발자
C : 그 외 Front End 개발자

 

- 주의사항

GRADE, ID를 기준으로 오름차순 정렬

 

2. 문제 풀이

 

- 첫번째 : 틀 생성

  • Front End 스킬들의 code를 병합한 테이블을 생성

즉, Front_skill_code를 생성하는 테이블을 제작 

-- Front End 스킬들의 CODE를 더 함
WITH FRONT_TABLE AS (
    SELECT SUM(CODE) AS FRONT_SKILL_CODE
    FROM SKILLCODES
    GROUP BY CATEGORY
    HAVING CATEGORY = 'Front End'
)

 

앞에 생성한 프론트 테이블을 활용해서 GRADE를 생성하고 조회

-- 
, DEV_TABLE AS (
    -- FRONT_TABLE를 활용해 GRADE 생성
    SELECT
    CASE 
        WHEN THEN 'A'
        WHEN THEN 'B'
        WHEN THEN 'C'
    ELSE NULL
    END AS GRADE, ID, EMAIL
    FROM DEVELOPERS D, FRONT_TABLE F
)

SELECT GRADE, ID, EMAIL
FROM DEV_TABLE
WHERE GRADE IS NOT NULL -- NULL값 제거
ORDER BY GRADE, ID -- 오름차순

 

- 두번째 : CASE문 채우기

-- GRADE를 생성한 DEV_TABLE
, DEV_TABLE AS (
    -- FRONT_TABLE를 활용해 GRADE 생성
    SELECT
    CASE 
        -- Front End와 Python 개발자
        WHEN (D.SKILL_CODE & F.FRONT_SKILL_CODE) AND (D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) THEN 'A'
        -- C# 개발자
        WHEN D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') THEN 'B'
        -- 그 외 Front End 개발자
        WHEN D.SKILL_CODE & F.FRONT_SKILL_CODE THEN 'C'
    ELSE NULL
    END AS GRADE, ID, EMAIL
    FROM DEVELOPERS D, FRONT_TABLE F
)

 

- 전체 코드

-- Front End 스킬들의 CODE를 더한 FRONT_TABLE
WITH FRONT_TABLE AS (
    SELECT SUM(CODE) AS FRONT_SKILL_CODE
    FROM SKILLCODES
    GROUP BY CATEGORY
    HAVING CATEGORY = 'Front End'
)

-- GRADE를 생성한 DEV_TABLE
, DEV_TABLE AS (
    -- FRONT_TABLE를 활용해 GRADE 생성
    SELECT
    CASE 
        -- Front End와 Python 개발자
        WHEN (D.SKILL_CODE & F.FRONT_SKILL_CODE) AND (D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) THEN 'A'
        -- C# 개발자
        WHEN D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') THEN 'B'
        -- 그 외 Front End 개발자
        WHEN D.SKILL_CODE & F.FRONT_SKILL_CODE THEN 'C'
    ELSE NULL
    END AS GRADE, ID, EMAIL
    FROM DEVELOPERS D, FRONT_TABLE F
)
         
-- 결과
SELECT GRADE, ID, EMAIL
FROM DEV_TABLE
WHERE GRADE IS NOT NULL -- NULL값 제거
ORDER BY GRADE, ID -- 오름차순

'코딩 알고리즘 스터디' 카테고리의 다른 글

프로그래머스 DP / N으로 표현 (Python)  (0) 2025.03.17
프로그래머스 [2025 프로그래머스 코드챌린지 2차 예선] / 택배상자 꺼내기 - java  (1) 2025.02.24
프로그래머스 [PCCP 기출문제] 1번 / 동영상 재생기  (0) 2025.02.16
프로그래머스 [PCCE 기출문제] 10번 / 데이터 분석  (0) 2025.02.16
프로그래머스 Lv.1 대충 만든 자판도움말 - Java  (1) 2025.01.12
'코딩 알고리즘 스터디' 카테고리의 다른 글
  • 프로그래머스 DP / N으로 표현 (Python)
  • 프로그래머스 [2025 프로그래머스 코드챌린지 2차 예선] / 택배상자 꺼내기 - java
  • 프로그래머스 [PCCP 기출문제] 1번 / 동영상 재생기
  • 프로그래머스 [PCCE 기출문제] 10번 / 데이터 분석
Rabet
Rabet
  • 블로그 메뉴

    • 관리자
    • 글쓰기
  • Rabet
    卯
    Rabet
  • 전체
    오늘
    어제
    • Root (139)
      • KT AIVLE School (85)
        • Start (4)
        • Python프로그래밍 & 라이브러리 (6)
        • 데이터 처리 및 분석 (7)
        • 데이터 분석 및 의미 찾기 (7)
        • 웹크롤링 (10)
        • 머신러닝 (10)
        • 딥러닝 (6)
        • 시각지능 딥러닝 (10)
        • 언어지능 딥러닝 (6)
        • JAVA (4)
        • SQL (2)
        • 가상화 클라우드 (5)
        • 프로젝트 (8)
      • QA (2)
        • 오류사항 (1)
      • 웹공부 (14)
        • SPRING (11)
        • React (1)
      • 코딩 알고리즘 스터디 (23)
      • 코딩테스트 (9)
        • JAVA (8)
        • HTML (1)
      • CS공부 (3)
      • 자격증공부 (3)
        • 정보처리기사 (1)
        • 컴퓨터활용능력 1급 (1)
        • AICE Associate (1)
        • CSTS (0)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Rabet
프로그래머스 LV.4 / 언어별 개발자 분류하기 (SQL)
상단으로

티스토리툴바