문제
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")
-- skillcodes 테이블에서 front end 카테고리에 해당하는 code의 합계와 developers 테이블의 skill_code 값을 &비트연산자로 계산
ORDER BY ID
결과값
계산 과정
WHERE SKILL_CODE & (SELECT SUM(CODE) FROM SKILLCODES WHERE CATEGORY = "Front End")
WHERE절을 살펴보자.
SKILLCODES 테이블의 Front End에 해당하는 모든 code 값을 합산하면 10256(10100000010000)이 도출된다.
각 개발자의 code를 이진수로 변환해보자.
- Carsen의 code는 2048 > 100000000000
- Cade의 code는 8452 > 10000100000100
- Jerami의 code는 400 > 110010000
각각의 값을 10256의 이진수 값 &연산해준다.
Carsen
10100000010000
00100000000000
-----------------------
00100000000000 > 2048로, React를 다룰 줄 아는 Frontend 개발자이다.
Cade
10100000010000
10000100000100
-----------------------
10000000000000 > 8192로, Vue를 다룰 줄 아는 Frontend 개발자이다.
Jerami
10100000010000
00000110010000
-----------------------
00000000010000 > 16로, JavaScript를 다룰 줄 아는 Frontend 개발자이다.
가끔 코딩테스트를 보면 비트연산자를 활용한 문제 풀이가 나오기도 한다. 이해하면 금방 적용할 수 있는 쉬운 내용이니 복습 한 번 더 하고 정리해야겠다.
'Data > SQL' 카테고리의 다른 글
[solvesql] 다음날도 서울숲의 미세먼지 농도는 나쁨 😢 (0) | 2024.02.24 |
---|---|
[Leetcode] 1045. Customers Who Bought All Products (0) | 2024.01.19 |
[Leetcode] 175. Combine Two Tables, 178. Rank Scores, 184. Department Highest Salary (0) | 2024.01.15 |
[Leetcode] 1661. Average Time of Process per Machine (0) | 2024.01.09 |
[Leetcode] 602. Friend Requests II: Who Has the Most Friends (0) | 2024.01.09 |