SQL/프로그래머스 문제풀이

[SELECT] 조건에 맞는 개발자 찾기 - LEVEL 2

너지살 2024. 4. 17. 16:37

 

 

 

문제 출저

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

 

프로그래머스

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

programmers.co.kr

 

 

 

문제 풀이

개발자 정보를 담은 테이블인 DEVELOPERS와 프로그래밍 언어에 대한 정보를 담은 테이블인 SKILLCODES가 주어집니다. Python, C# 둘 중 하나를 보유한 개발자의 ID, EMAIL, FIRST_NAME, LAST_NAME을 ID 순으로 조회해야 합니다. 

 

먼저 DEVELOPER의 SKILL_CODE와 SKILLCODES의 CODE를 조인합니다. 

조건절인 WHERE문을 사용하여 SKILLCODES의 NAME이 Python, C# 인 것을 찾습니다. 

이 때, Python, C#을 모두 보유한 개발자는 두 번 조회하므로 DISTINCT를 사용하여 중복을 줄입니다. 

 

 

 

SQL

SELECT DISTINCT
    D.ID,
    D.EMAIL,
    D.FIRST_NAME,
    D.LAST_NAME
FROM
    DEVELOPERS AS D 
JOIN
    SKILLCODES AS S 
ON
    D.SKILL_CODE & S.CODE > 0
WHERE
    S.NAME IN ('Python', 'C#')
ORDER BY
    D.ID
    
# Python, C# 둘 다 가진 개발자는 두 번 나오므로 DISTINCT를 사용하여 중복을 제거한다. 
              



# 다른 풀이 

# SELECT DISTINCT B.ID, B.EMAIL, B.FIRST_NAME, B.LAST_NAME
# FROM SKILLCODES A
# JOIN DEVELOPERS B ON (A.CODE & B.SKILL_CODE) > 0
# WHERE A.NAME = 'Python' OR A.NAME = 'C#'
# ORDER BY B.ID;

# SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
# FROM DEVELOPERS
# WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
# OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
# ORDER BY ID;