프로그래머스 Lv3 언어별 개발자 분류하기(MySQL)

vvo_ter·2024년 7월 18일
0

daily-sql

목록 보기
5/6
post-custom-banner

💻 문제

코딩테스트 연습 > GROUP BY > 언어별 개발자 분류하기

문제 설명

DEVELOPERS 테이블에서 GRADE별 개발자의 정보를 조회합니다.

GRADE는 다음과 같이 정해집니다.

  • A : Front End 스킬과 Python 스킬을 함께 가지고 있는 개발자
  • B : C# 스킬을 가진 개발자
  • C : 그 외의 Front End 개발자

GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요. 결과는 GRADE와 ID를 기준으로 오름차순 정렬합니다.

테이블 설명

SKILLCODES의 CODE와 DEVELOPERS의 SKILL CODE는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다.

🔐 풀이

아이디어

답지를 참고했다..

비트 연산자(&)를 사용하여 developers의 skill_code와 skillcodes의 코드 값을 연산하여 0이 아닌 경우 GRADE를 부여합니다.

  1. front end 역량이 있는 개발자 코드의 합을 구합니다.
  2. null을 제외한 값을 출력해야하므로 가상테이블을 하나 더 만듭니다.

👉 제출 코드

with a as (
    select sum(code) code
    from SKILLCODES
    group by category
    having category = 'Front End'
), b as (
    select case 
        when skill_code & (select code from a)
            and skill_code & (select code from skillcodes where name = 'Python') then 'A'
        when skill_code & (select code from skillcodes where name = 'C#') then 'B'
        when skill_code & (select code from a) then 'C'
        end as grade,
        id, email
    from DEVELOPERS
    order by grade, id
)

select *
from b
where grade is not null
profile
's Coding Memory
post-custom-banner

0개의 댓글