👇 Python 개발자 찾기
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔓 문제 설명
DEVELOPER_INFOS 테이블에서 Python 스킬을 가진 개발자의 정보를 조회하려 합니다. Python 스킬을 가진 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
결과는 ID를 기준으로 오름차순 정렬해 주세요.
예시 문제 데이터(ITEM_INFO)
| ID | FIRST_NAME | LAST_NAME | SKILL_1 | SKILL_2 | SKILL_3 | |
| D161 | Carsen | Garza | carsen_garza@grepp.co | React | (NULL) | (NULL) |
| D162 | Cade | Cunningham | cade_cunningham@grepp.co | Vue | C++ | Python |
| D163 | Luka | Cory | luka_cory@grepp.co | Node.js | (NULL) | (NULL) |
| D164 | Kelly | Grant | kelly_grant@grepp.co | C# | (NULL) | (NULL) |
| D165 | Jerami | Edwards | jerami_edwards@grepp.co | Java | JavaScript | Python |
⚡SQL Query
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE 'Python' IN (SKILL_1, SKILL_2, SKILL_3)
ORDER BY ID ASC;
🔎 풀이 설명
1. 조건 필터링: SKILL_1 = 'Python' OR ...으로 작성해도 되지만 쿼리를 간결하게 IN()을 사용하였습니다.
💡인사이트
1. 반복 그룹의 문제
- SKILL_1, SKILL_2, SKILL_3 처럼 동일한 성격의 속성이 여러 컬럼으로 나열된 구조는 성능과 유지보수에서 불리합니다.
- 인덱스 효율 저하: 'Python'을 찾기 위해 3개의 컬럼을 모두 인덱스에 넣거나, 각각 인덱스를 타게 하려면 쿼리가 복잡하고 인덱스 용량도 커집니다.
- 확장성 부족: 스킬이 4개인 개발자가 나오면 테이블 구조(SKILL_4)를 추가 해야합니다.
2. 정규화
- 여러 SKILL 컬럼을 하나의 테이블로 분리하는 것 관리와 성능이 좋아집니다.
3. 실행 계획
- 현재 구조에서는 SKILL_1, SKILL_2, SKILL_3에 각각 인덱스가 있더라도, OR 조건으로 묶이게 되어 옵티마이저는 보통 Table Full Scan을 선택하게 됩니다. 데이터가 아주 많아지면 성능 저하가 우려되는 패턴입니다.
'🗄️ DB_이야기 > # ⚡SQL' 카테고리의 다른 글
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 대장균들의 자식의 수 구하기(SELECT) (1) | 2026.04.15 |
|---|---|
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 맞는 개발자 찾기(SELECT) (1) | 2026.04.15 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 업그레이드 된 아이템 구하기(SELECT) (0) | 2026.04.15 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 상위 n개 레코드(SELECT) (0) | 2026.04.15 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 오프라인/온라인 판매 데이터 통합하기(SELECT) (0) | 2026.04.14 |