Home

언어별 개발자 분류하기

Link

Tables

erDiagram
	SKILLCODES {
		NAME VARCHAR PK
		CATEGORY VARCHAR
		CODE INTEGER PK
	}
	DEVELOPERS {
		ID VARCHAR PK
		FIRST_NAME VARCHAR
		LAST_NAME VARCHAR
		EMAIL VARCHAR PK
		SKILL_CODE INTEGER
	}
	SKILLCODES ||--o{ DEVELOPERS : Skills
Mermaid
복사

Question

DEVELOPERS 테이블에서 GRADE별 개발자의 정보를 조회하려 합니다. GRADE는 다음과 같이 정해집니다.
A : Front End 스킬과 Python 스킬을 함께 가지고 있는 개발자
B : C# 스킬을 가진 개발자
C : 그 외의 Front End 개발자
GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요.
결과는 GRADE와 ID를 기준으로 오름차순 정렬해 주세요.

DataFlow

DEVELOPERS 테이블에 SKILLCODES를 조인 CASE WHEN 으로 GRADE 분류 문자열 관련 방법으로 엄청 오래 고민헸지만, 한줄 조인으로 해결되는 비트 매칭이라는 방법이 있음 그리고 GROUP CONCAT 사용하면 바로임

Answer

WITH code_detail AS ( SELECT CODE, NAME, CATEGORY FROM SKILLCODES ), dev_detail AS ( SELECT ID, EMAIL, SKILL_CODE FROM DEVELOPERS ), result AS ( SELECT d.ID, d.EMAIL, c.NAME, c.CATEGORY FROM dev_detail d JOIN code_detail c ON (d.SKILL_CODE & c.CODE) = c.CODE ), grade AS ( SELECT ID, EMAIL, GROUP_CONCAT(DISTINCT NAME ORDER BY NAME SEPARATOR ',') AS lang, GROUP_CONCAT(DISTINCT CATEGORY ORDER BY CATEGORY SEPARATOR ',') AS cate FROM result GROUP BY ID, EMAIL ) SELECT CASE WHEN INSTR(cate, 'Front End') > 0 AND INSTR(lang, 'Python') > 0 THEN 'A' WHEN INSTR(lang, 'C#') > 0 THEN 'B' WHEN INSTR(cate, 'Front End') > 0 THEN 'C' END AS GRADE, ID, EMAIL FROM grade HAVING GRADE IS NOT NULL ORDER BY GRADE ASC, ID ASC;
SQL
복사