Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

하루에 하나씩 공부하기

언어별 개발자 분류하기-LV4 본문

카테고리 없음

언어별 개발자 분류하기-LV4

dltaexox 2025. 1. 17. 16:23

- 문제

DEVELOPERS 테이블에서 GRADE별 개발자의 정보를 조회하려 합니다. GRADE는 다음과 같이 정해집니다.

  • A : Front End 스킬과 Python 스킬을 함께 가지고 있는 개발자
  • B : C# 스킬을 가진 개발자
  • C : 그 외의 Front End 개발자

GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요.

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

 

코딩테스트 연습 - 언어별 개발자 분류하기 | 프로그래머스 스쿨

 

프로그래머스

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

programmers.co.kr

 

- 키포인트 

1. 이진수 처리와 잘못된 접근 방식 - 많이 헤맴

십진수 > 이진수 처리 방법인 BIN()을 쓰는게 아니라 그냥 십진수 자체로 처리하면 됨

D.SKILL_CODE & FE.SKILL_CODE : 이렇게만 해도 프론트엔드 해당 언어 필터링 가능 > WHEN 1 이면 출력

 

2. CASE WHEN 절의 ELSE 값 설정

ELSE 에 0을 두고, 설정하지 않기도 했지만 NULL로 처리하고 WHERE 절로 IS NOT NULL 처리하면 해당하지 않는 값들을 출력하지 않을 수 있음

 

- 코드

WITH FE AS (
    SELECT SUM(CODE) AS SKILL_CODE 
    FROM SKILLCODES 
    WHERE CATEGORY='Front End'
), DEV_GRADE AS (
SELECT ID, EMAIL,
    CASE 
    WHEN D.SKILL_CODE & FE.SKILL_CODE AND D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME='Python') THEN 'A'
    WHEN D.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME='C#') THEN 'B'
    WHEN D.SKILL_CODE & FE.SKILL_CODE THEN 'C'
    ELSE NULL
    END AS GRADE
FROM DEVELOPERS D, FE)

SELECT GRADE, ID, EMAIL
FROM FE, DEV_GRADE
WHERE GRADE IS NOT NULL
ORDER BY GRADE, ID;

 

WITH GA AS(
SELECT ID, EMAIL, 
CASE
WHEN COUNT(CASE WHEN CATEGORY='Front End' THEN 1 END)>0 
    AND COUNT(CASE WHEN NAME='Python' THEN 1 END)>0 THEN 3
WHEN COUNT(CASE WHEN NAME='C#' THEN 1 END)>0 THEN 2
WHEN COUNT(CASE WHEN CATEGORY='Front End' THEN 1 END)>0 THEN 1
END AS SCORE
FROM DEVELOPERS D JOIN SKILLCODES S ON D.SKILL_CODE & S.CODE
GROUP BY ID, EMAIL
HAVING SCORE>0
)

SELECT 
CASE WHEN SCORE=3 THEN 'A'
WHEN SCORE=2 THEN 'B'
WHEN SCORE=1 THEN 'C'
END AS GRADE, ID, EMAIL
FROM GA
ORDER BY GRADE, ID;