본문 바로가기
프로그래머스/lv4

[프로그래머스 lv4] 언어별 개발자 분류하기 MYSQL

반응형

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

 

프로그래머스

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

programmers.co.kr

 

 

문제 내용

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

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

 

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

 

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

 

해결 방법

JOIN 으로 AND 연산자를 통해 해당 스킬을 가진 사람들을 뽑아낸 다음 GROUP_CONCAT과 CASE 문을 이용해 문제를 해결할 수 있습니다.

 

1. JOIN ON (A.SKILL_CODE & B.CODE = A.CODE) 를 이용해 해당스킬을 가진 사람들을 뽑아냅니다.

2. 다른 스킬을 가진 중복된 사람들을 합치기 위해 GROUP BY A.ID, A.EMAIL 로 묶습니다.

3. CASE 와 GROUP CONCAT 으로 해당 A, B, C 그룹으로 나눕니다.

4. 끝.

 

 

해결 쿼리문

-- 코드를 작성해주세요

SELECT
        CASE 
        WHEN GROUP_CONCAT(B.NAME) LIKE ("%Python%") AND GROUP_CONCAT(B.CATEGORY) LIKE("%Front%") THEN "A"
        WHEN GROUP_CONCAT(B.NAME) LIKE ("%C#%") THEN "B"
        WHEN GROUP_CONCAT(B.CATEGORY) LIKE ("%Front%") THEN "C"
        END AS  GRADE ,
        A.ID,
        A.EMAIL
                                               
FROM DEVELOPERS  AS A
JOIN SKILLCODES AS B
ON (A.SKILL_CODE & B.CODE = B.CODE)
GROUP BY ID,EMAIL 
HAVING GRADE IS NOT NULL
ORDER BY GRADE ASC , ID ASC
;
-- 코드를 작성해주세요 SELECT CASE WHEN GROUP_CONCAT(B.NAME) LIKE ("%Python%") AND GROUP_CONCAT(B.CATEGORY) LIKE("%Front%") THEN "A" WHEN GROUP_CONCAT(B.NAME) LIKE ("%C#%") 다음 "B" WHEN GROUP_CONCAT(B.CATEGORY) LIKE ("%Front%") 그런 다음 "C"는 등급, A.ID, A.개발자로부터 받은 이메일로 종료됩니다. B ON(A.SKILL_CODE & B.CODE = B.CODE)으로 조인 스킬코드로 개발자가 보낸 이메일(A.SKILL_CODE & B.CODE = B.CODE) ID별 그룹, 이메일 HAVING 등급은 등급 ASC, ID ASC에 따른 순서로 NULL이 아닙니다.