코딩테스트/SQL

[SQL][BIT] 조건에 맞는 개발자 찾기

박소민 2024. 11. 1. 21:16
조건에 맞는 개발자 찾기
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

  • 내 풀이
    • D.SKILL_CODE & S.CODE = S.CODE
    • AND 한 값이 스킬의 CODE 값이 나오면 둘다 그 값을 가진 것이므로
      • D.SKILL_CODE & S.CODE = S.CODE
    • 📍주의
      • JOIN 시 중복이 생길 수 있는지 신경쓰기
      • DEVELOPERS.SKILL_CODE는 비트 단위로 여러 스킬을 동시에 포함할 수 있어서,
      • 하나의 개발자가 여러 행의 SKILLCODES에 매치될 수 있음
        • → 동일한 개발자 정보가 여러 번 나올 수 있으므로, 중복 제거를 위해 DISTINCT를 써야 합니다.
개발자의 SKILL_CODE가 400 (=b'110010000')이라면,
이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000')
에 해당하는 스킬을 가졌다는 것
SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D
JOIN SKILLCODES S
ON D.SKILL_CODE & S.CODE = S.CODE
WHERE S.NAME='Python' OR S.NAME='C#'
ORDER BY 1 ASC