코딩테스트 연습 > GROUP BY > 언어별 개발자 분류하기
DEVELOPERS 테이블에서 GRADE별 개발자의 정보를 조회합니다.
GRADE는 다음과 같이 정해집니다.
GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요. 결과는 GRADE와 ID를 기준으로 오름차순 정렬합니다.
SKILLCODES의 CODE와 DEVELOPERS의 SKILL CODE는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다.
답지를 참고했다..
비트 연산자(&)를 사용하여 developers의 skill_code와 skillcodes의 코드 값을 연산하여 0이 아닌 경우 GRADE를 부여합니다.
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