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
'DataBase > SQL 문제풀이' 카테고리의 다른 글
[MySQL] 초 단위 시간차이 계산 (0) | 2024.04.08 |
---|---|
[SQL] GROUP BY 사용 시 주의점 (1) | 2024.03.23 |
[SQL 문제풀이] 저자 별 카테고리 별 매출액 집계하기 (1) | 2023.12.20 |
[프로그래머스] SELECT / 오프라인/온라인 판매 데이터 통합하기 (0) | 2022.12.13 |
[프로그래머스] SELECT / 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2022.12.06 |