일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코테준비
- SQL
- 약수구하기
- leetcode문풀
- 오블완
- 데벨챌
- 서브쿼리
- sql문풀
- 데이터리안실전반
- 위키독스
- 셀프조인
- 티스토리챌린지
- 데이터리안
- mysql
- 그로스해킹
- 활성사용자수
- 파이썬
- 파이썬문풀
- SQL테스트
- with절
- 문풀
- levle1
- sql50
- leetcode
- join
- 프로그래머스문풀
- 프로그래머스
- 윈도우함수
- SQL고득점KIT
- 데이터리안넥스트레벨챌린지
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 특정 카테고리의 스킬을 보유한 개발자 조회 본문
출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] : FrontEnd 개발자 찾기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/276035
문제(일부): 스킬코드 정보 테이블과 개발자 정보 테이블을 통해 "Front End'스킬을 가진 개발자 정보를 조회
1. WITH절과 서브쿼리 활용풀이
0) 실수한 POINT
2개의 테이블을 JOIN했을 때 여러 스킬을 보유한 경우
중복된 개발자 정보 레코드가 발생함 => 중복을 고려한 쿼리 작성필요
1) 2개 테이블을 JOIN
ON 조건에 &연산자를 사용하여 스킬코드 테이블의 스킬을 보유한 개발자 선택
WEHRE절에서 카테고리가 "Front End"인 것으로 필터링
2) 메인쿼리의 WHERE절에서 서브쿼리를 사용하여
WITH절에 있는 ID를 선택(Front End 스킬을 보유한 ID)
WITH FRONT_END AS (
SELECT DISTINCT (DEV.ID)
-- JOIN을 사용하면 여러개의 스킬을 보유한 경우 중복발생
FROM SKILLCODES AS SK
INNER JOIN DEVELOPERS AS DEV
ON SK.CODE & DEV.SKILL_CODE = SK.CODE
-- SKILL CODE의 스킬을 보유한 개발자
WHERE SK.CATEGORY = "Front End"
ORDER BY DEV.ID)
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE ID IN (SELECT * FROM FRONT_END)
-- FRONT_END스킬이 있는 ID를 필터링
ORDER BY ID
2. GROUP BY와 서브쿼리 활용 풀이
0) 답안출처: https://school.programmers.co.kr/ques
1) WHERE절에서 서브쿼리를 사용하여 "Front End" 카테고리를 가진 개발자를 필터링
*서브쿼리에서 "Front End" 카테고리인 코드들의 합과 메인쿼리의
SELECT ID
, EMAIL
, FIRST_NAME
, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (
SELECT SUM(CODE)
FROM SKILLCODES
WHERE CATEGORY = 'Front End')
ORDER BY ID
3. JOIN과 GROUP BY 활용 풀이
0) 답안출처: https://school.programmers.co.kr/questions/72475
1) 2개 테이블을 JOIN
ON조건 절에 |를 사용하여 스킬코드 테이블의 스킬을 보유한 개발자 선택
2) WHERE 조건절에서 Front End 카테고리를 필터링
3) GROUP BY로 중복된 ID가 나오지 않게 함
SELECT D.ID, MAX(D.EMAIL) AS EMAIL, MAX(D.FIRST_NAME) AS FIRST_NAME, MAX(D.LAST_NAME) AS LAST_NAME
FROM DEVELOPERS D
INNER JOIN SKILLCODES S
ON S.CODE | D.SKILL_CODE = D.SKILL_CODE
WHERE CATEGORY = 'Front End'
GROUP BY D.ID
ORDER BY D.ID
'SQL > SQL문풀' 카테고리의 다른 글
[MY SQL] 기간별 할인율 가격에 반영하기 (0) | 2024.05.04 |
---|---|
[MY SQL] 전화번호 '-'기호 넣기 (0) | 2024.04.29 |
[MY SQL] 특정년도에 가입한 회원 중 구매한 회원 수, 비율 구하기 (0) | 2024.04.28 |
[MY SQL] DENSE_RANK를 활용하여 리뷰를 가장 많이 작성한 회원의 리뷰 조회 (0) | 2024.04.27 |
[MY SQL] WITH절을 활용하여 평가등급 및 성과금 조회 (1) | 2024.04.21 |