ror_coding

[Programmers Lv.4] 언어별 개발자 분류하기 - 276036 본문

Algorithm/SQL

[Programmers Lv.4] 언어별 개발자 분류하기 - 276036

ro_rdil_31 2025. 1. 12. 16:13
728x90
728x90

BIT_OR( ) 을 사용하여 특정 SKILL_CODE와 비교가 가능하게 한다.

 

Question

 

DEVELOPERS 테이블에서 GRADE별 개발자의 정보를 조회하려 합니다. GRADE는 다음과 같이 정해

집니다.

A : Front End 스킬과 Python 스킬을 함께 가지고 있는 개발자
B : C# 스킬을 가진 개발자
C : 그 외의 Front End 개발자
GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요.

결과는 GRADE와 ID를 기준으로 오름차순 정렬해 주세요.

 

Point

 

  • BIT_OR( ) : 여러 행의 값을 받아 각각의 비트에 대해 OR 연산을 수행한 결과를 반환.
  • CASE 구문에서 0보다 큰지 확인하는 이유 : 비트 플래그는 정수로 표현되며, 비트가 활성화되지 않으면 결과는 0임.
    • => 따라서 Python이면서 SKILL_CODE가 같으면 해당 & 연산 결과가 CODE 로 출력되기 때문에 조건에 해당하는 비트 값 즉, CODE 가 출력됨. (따라서 이는 0 이상이기 때문에 TRUE.)

 

Code

 

SELECT 
        CASE
            WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) AND
                    (SKILL_CODE & (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE CATEGORY = 'Front End')) > 0 THEN 'A'
            WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')) THEN 'B'
            WHEN (SKILL_CODE & (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE CATEGORY = 'Front End')) > 0 THEN 'C'
        END AS GRADE, 
        ID, 
        EMAIL
    FROM DEVELOPERS
    HAVING GRADE IS NOT NULL
    ORDER BY 1, 2

 

now me

On my github
728x90