🤔 문제
`SKILLCODES` 테이블은 개발자들이 사용하는 프로그래밍 언어에 대한 정보를 담은 테이블입니다. `SKILLCODES` 테이블의 구조는 다음과 같으며, `NAME`, `CATEGORY`, `CODE`는 각각 스킬의 이름, 스킬의 범주, 스킬의 코드를 의미합니다. 스킬의 코드는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다.
`DEVELOPERS` 테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블입니다. `DEVELOPERS` 테이블의 구조는 다음과 같으며, `ID`, `FIRST_NAME`, `LAST_NAME`, `EMAIL`, `SKILL_CODE`는 각각 개발자의 ID, 이름, 성, 이메일, 스킬 코드를 의미합니다. `SKILL_CODE` 컬럼은 INTEGER 타입이고, 2진수로 표현했을 때 각 bit는 `SKILLCODES` 테이블의 코드를 의미합니다.
예를 들어 어떤 개발자의 `SKILL_CODE`가 400 (=b'110010000')이라면, 이는 `SKILLCODES` 테이블에서 `CODE`가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.
`DEVELOPERS` 테이블에서 Front End 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
결과는 ID를 기준으로 오름차순 정렬해 주세요.
예시
예를 들어 `SKILLCODES` 테이블이 다음과 같고,
`DEVELOPERS` 테이블이 다음과 같다면
다음과 같이 `DEVELOPERS` 테이블에 포함된 개발자 중 Front End 스킬을 가진을 가진 개발자의 정보가 결과에 나와야 합니다.
💻 나의 풀이 (틀림)
WITH DEV AS(
SELECT ID, FIRST_NAME, LAST_NAME, EMAIL, SUM(SKILL_CODE) AS CODESUM
FROM DEVELOPERS
GROUP BY ID -- 개발자ID별로 묶어서 스킬 코드 집계
)
SELECT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEV D
LEFT JOIN SKILLCODES S ON D.CODESUM = S.CODE
WHERE S.CATEGORY = 'Front End'
ORDER BY 1;
결과
🖍 오답노트
틀린 이유
문제 자체를 잘못 이해했다 ...
문제에서
예를 들어 어떤 개발자의 `SKILL_CODE`가 400 (=b'110010000')이라면, 이는 `SKILLCODES` 테이블에서 `CODE`가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.
위의 문장 때문에 `DEVELOPERS` 테이블의 `SKILL_CODE`의 합이 `SKILLCODE` 테이블의 `CODE`와 일치하는 것을 찾는 문제로 착각했다.
💡 다른 풀이
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS AS D
WHERE SKILL_CODE &
(SELECT CODE
FROM SKILLCODES
WHERE CATEGORY = 'Front End')
ORDER BY ID;
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS AS D
WHERE SKILL_CODE &
(SELECT SUM(CODE) AS CODESUM
FROM SKILLCODES
WHERE CATEGORY = 'Front End')
ORDER BY ID;
'취업준비 > 코딩테스트 문제 풀이' 카테고리의 다른 글
[프로그래머스 SQL 코딩테스트 연습] GROUP BY - 저자 별 카테고리 별 매출액 집계하기 (0) | 2024.04.30 |
---|---|
[프로그래머스 SQL 코딩테스트 연습] GROUP BY - 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2024.04.30 |
[프로그래머스 SQL 코딩테스트 연습] Summer/Winter Coding(2019) - 우유와 요거트가 담긴 장바구니 (0) | 2024.04.22 |
[프로그래머스 SQL 코딩테스트 연습] GROUP BY - 카테고리 별 도서 판매량 집계하기 (0) | 2024.04.08 |
[프로그래머스 SQL 코딩테스트 연습] String, Date - 자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.04.08 |