알고리즘 공부/SQL

[L4] 프로그래머스 MYSQL FrontEnd 개발자 찾기

마달랭 2024. 10. 18. 22:37
반응형

테이블 정보

1. SKILLCODES

NAME TYPE UNIQUE NULLABLE
NAME VARCHAR(N) Y N
CATEGORY VARCHAR(N) N N
CODE INTEGER Y N

 

 

2. DEVELOPERS

NAME TYPE UNIQUE NULLABLE
ID VARCHAR(N) Y N
FIRST_NAME VARCHAR(N) N Y
LAST_NAME VARCHAR(N) N Y
EMAIL VARCHAR(N) Y N
SKILL_CODE INTEGER N N

 

 

예시 테이블

1. SKILLCODES

NAME CATEGORY CODE
C++ Back End 4
JavaScript Front End 16
Java Back End 128
Python Back End 256
C# Back End 1024
React Front End 2048
Vue Front End 8192
Node.js Back End 16384

 

 

2. DEVELOPERS

ID FIRST_NAME LAST_NAME EMAIL SKILL_CODE
D165 Jerami Edwards jerami_edwards@grepp.co 400
D161 Carsen Garza carsen_garza@grepp.co 2048
D164 Kelly Grant kelly_grant@grepp.co 1024
D163 Luka Cory luka_cory@grepp.co 16384
D162 Cade Cunningham cade_cunningham@grepp.co 8452

 

 

출력 기대값

ID EMAIL FIRST_NAME LAST_NAME
D161 carsen_garza@grepp.co Carsen Garza
D162 cade_cunningham@grepp.co Cade Cunningham
D165 jerami_edwards@grepp.co Jerami Edwards

 

 

문제

DEVELOPERS 테이블에서 Front End 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.

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

 

 

아이디어

  1. 문제 조건에 친절하게도 BIT에 대한 설명이 나와있다, 비트 연산을 통해 문제를 풀면 된다.
  2. DEVELOPERS, SKILLCODES 테이블을 SKILL_CODE칼럼과 CODE칼럼을 비트연산 했을때 0이상인 레코드만 추려서 JOIN해준다.
  3. SKILLCODES의 CATEGORY가 프론트 엔드인 경우를 WHERE절로 추려준다.
  4. 여기서 부터 예제는 맞지만 제출하면 틀리는 현상이 발생했다.
  5. 문제 데이터 상에선 중복이 발생하지 않지만, SKILL_CODE와 CODE의 연산이 반복되므로 중복이 발생한다.
  6. 이를 GROUP BY를 통해 중복을 제거해 주었다.
  7. 정렬은 ID를 오름차순으로 해주면 된다.

 

정답

SELECT A.ID, A.EMAIL, A.FIRST_NAME, A.LAST_NAME
FROM DEVELOPERS A
JOIN SKILLCODES B
ON A.SKILL_CODE & B.CODE > 0
WHERE B.CATEGORY = 'Front End'
GROUP BY A.ID, A.EMAIL, A.FIRST_NAME, A.LAST_NAME
ORDER BY A.ID;

 

 

참고사항

레코드가 중복될 가능성을 생각해 내기가 어려운 문제였다.

 

728x90
반응형