🤔 문제
`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` 테이블에서 GRADE별 개발자의 정보를 조회하려 합니다. GRADE는 다음과 같이 정해집니다.
- A : Front End 스킬과 Python 스킬을 함께 가지고 있는 개발자
- B : C# 스킬을 가진 개발자
- C : 그 외의 Front End 개발자
GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요.
결과는 GRADE와 ID를 기준으로 오름차순 정렬해 주세요.
예시
예를 들어 `SKILLCODES` 테이블이 다음과 같고,
`DEVELOPERS` 테이블이 다음과 같다면
다음과 같이 `DEVELOPERS` 테이블에 포함된 개발자들의 GRADE 및 정보가 결과에 나와야 합니다.
💻 나의 풀이 (틀림)
SELECT
CASE
WHEN (s.CATEGORY = 'Front End' AND s.NAME = 'Python') THEN 'A'
WHEN (s.NAME = 'C#') THEN 'B'
ELSE 'C'
END AS GRADE,
d.ID,
d.EMAIL
FROM DEVELOPERS d
LEFT JOIN SKILLCODES s ON d.SKILL_CODE & s.CODE
GROUP BY d.EMAIL
ORDER BY 1, 2;
결과
🖍 오답노트
틀린이유
정답 풀이
WITH FE AS(
SELECT SUM(CODE)
FROM SKILLCODES
WHERE CATEGORY = 'Front End'
)
SELECT
CASE
WHEN SKILL_CODE & (SELECT * FROM FE) AND SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME='Python') THEN 'A'
WHEN SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME='C#') THEN 'B'
WHEN SKILL_CODE & (SELECT * FROM FE) THEN 'C'
ELSE NULL
END AS GRADE, ID, EMAIL
FROM DEVELOPERS
HAVING GRADE IS NOT NULL
ORDER BY 1, 2;
'취업준비 > 코딩테스트 문제 풀이' 카테고리의 다른 글
[프로그래머스 SQL 코딩테스트 연습] Lv4. 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (MySQL) (0) | 2024.06.07 |
---|---|
[프로그래머스 SQL 코딩테스트 연습] Lv4. 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기 (MySQL) (0) | 2024.06.03 |
[프로그래머스 SQL 코딩테스트 연습] 헤비 유저가 소유한 장소 (0) | 2024.05.27 |
[프로그래머스 SQL 코딩테스트 연습] SUM, MIN/MAX - 물고기 종류 별 대어 찾기 (0) | 2024.05.22 |
[프로그래머스 SQL 코딩테스트 연습] JOIN - 없어진 기록 찾기 (0) | 2024.05.20 |