레벨: 4
언어: Mysql
해당 문제는 비트마스크를 사용한 문제인데,
비트연산자를 이해하고 있는 상태면 풀수 있는 문제라고 생각합니다
A등급은 프론트엔드에 해당되는 스킬인 비트를 가지고, 파이썬 스킬을 가지면 되는 문제라서
일단 비트연산자인 & 사용하여 관련되 비트를 포함하고있으면 1이상 나오기때문에 True가 되고 Python 스킬을 가진지 &로 비교하여 True를 구하고
나머지 B,C 등급도 이와 똑같이 비교해서 등급을 구하면됩니다
SELECT
CASE WHEN SKILL_CODE & (SELECT SUM(CODE) FROM SKILLCODES WHERE CATEGORY = 'Front End')
&& 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 SUM(CODE) FROM SKILLCODES WHERE CATEGORY = 'Front End') THEN 'C'
END GRADE
, ID
, EMAIL
FROM DEVELOPERS
HAVING GRADE IS NOT NULL
ORDER BY GRADE, ID