[프로그래머스] 조건에 맞는 개발자 찾기

yannie·2024년 9월 28일
0

[문제]

DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.

결과는 ID를 기준으로 오름차순 정렬해 주세요.

[내가 푼 풀이(오답)]

-- 10진수를 2진수로 변환하는 함수 CONV(데이터, 원본진법, 변환할 진법)

WITH SKILLCODES AS 
    (SELECT
        NAME,
        CATEGORY,
        CONV(CODE, 2, 10) AS CODE
     FROM SKILLCODES
    )
SELECT
    ID,
    EMAIL,
    FIRST_NAME,
    LAST_NAME
FROM DEVELOPERS D
INNER JOIN SKILLCODES S
ON S.CODE = D.SKILL_CODE
ORDER BY 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;
-- chat GPT
SELECT 
    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 IN ('Python', 'C#')
ORDER BY 
    D.ID ASC;

[코드리뷰]

  • EVELOPERS 테이블의 SKILL_CODE와 SKILLCODES 테이블의 CODE 간의 비트 AND 연산 결과가 S.CODE와 동일한지를 검사
  • WHERE S.NAME IN ('Python', 'C#')는 Python 또는 C#스킬을 가진 개발자만 선택

기억해!

  • 조인 조건을 사용하지 않아도 서브쿼리로 각각의 스킬에 대해 CODE를 가져와서 비트연산자를 사용해 각 스킬을 가진 개발자를 필터링함...
    .....아직도 무슨 말인지 이해가 안됨..

0개의 댓글