본문 바로가기
DataBase/SQL 문제풀이

[SQL] MySQL에서의 비트연산 / 프로그래머스 Front End 개발자 찾기

by Dev_Green 2024. 3. 24.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 탐색

이번 문제는 SQL 문제를 풀면서 처음으로 비트연산을 다뤄보게된 문제입니다.

비트연산 중에서 AND(&) 연산을 사용하는데요.

 

SKILLCODES 테이블의 CODE 컬럼값의 의미를 살펴보면, 해당 값을 이진수로 변환했을 때 1로 표현되는 bit는 그 기술을 가지고 있다는 의미라고 합니다.

즉, 예를 들어 어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.

 

여기서 AND 연산을 사용해볼만한 각이 나옵니다.

다음 쿼리를 실행했을 때, 두 수 모두 1인 bit를 합산한 결과를 얻을 수 있습니다.

SELECT 7 & 3  // 결과값: 3

 

이와 같은 특성을 활용해서 프론트엔드 기술을 가지고 있는 개발자를 추려낼 수 있게 됩니다.

MySQL 쿼리

# DEVELOPERS 테이블에서 Front End 스킬을 가진 개발자의 정보를 조회
# 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해
# 결과는 ID를 기준으로 오름차순 정렬
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM developers
WHERE skill_code & (
    SELECT sum(code)
    FROM skillcodes
    WHERE category = 'Front End'
)
ORDER BY 1