질답은 아래와 같다.
Q: 자 CTE 들어가기전, 나는 정말 자주 나오고, 리트코드 + 회사 입사 코딩테스트 (SQL 데이터분석)에 맞게 문제를 풀어보고 싶어. 도와줄래?
A:
문제 1: 부서별 평균보다 높은 연봉 가진 직원 찾기 (난이도:⭐)
각 부서에서, 해당 부서의 평균 연봉보다 높은 연봉을 받는 직원의 이름과 연봉을 출력하라.
- 테이블: employees(department, name, salary)
# 각 부서에서, 해당 부서의 평균 연봉보다 높은 연봉을 받는 직원의 이름과 연봉을 출력하라.
# 테이블: employees(department, name, salary)
SELECT name,salary,department FROM employees e
WHERE salary >
(SELECT AVG(salary)
FROM employees
WHERE department = e.department);
# 핵심 -> 부서 평균 연봉을 구하고, 그걸 직원 연봉과 비교해야함
# (상관)서브쿼리 써야함
🔥 문제 2: 매니저가 3명 이상 직원 관리하는 경우만 출력 (난이도:⭐⭐)
직원 수가 3명 이상인 매니저의 이름과 직원 수를 출력하라.
- 테이블: employees(employeeId, name, managerId)
# 문제 2: 매니저가 3명 이상 직원 관리하는 경우만 출력 (난이도:⭐⭐)
# 직원 수가 3명 이상인 매니저의 이름과 직원 수를 출력하라.
# 테이블: employees(employeeId, name, managerId)
SELECT m.name AS manger_name, COUNT(e.employeeId) AS ct
FROM employees e
INNER JOIN employees m
ON e.managerId = m.employeeId
GROUP BY m.name
HAVING COUNT(e.employeeId) >= 3;
# 1.JOIN + CASE WHEN 해서 직원 담당 매니저 변수만들기
# 2.COUNT활용해서 COUNT > 3인 매니저 이름과 직원 수 출력하기 -> GROUPBY + HAVING으로!
처음엔 CASE WHEN을 썼더니 반응이,..
그냥 욕을 해.
이걸 알아야 풀 수 있다고.!
🔥 문제 3: 이전 연도보다 연봉이 오른 직원만 출력 (난이도:⭐⭐⭐)
같은 직원이 여러 해에 걸쳐 기록된 salaries 테이블에서,
이전 연도보다 연봉이 증가한 경우만 employeeId, year, salary를 출력하라.
- 테이블: salaries(employeeId, year, salary)
(Hint: self join, 또는 나중에 윈도우 함수로 리팩터링 가능)
🔥 문제 4: 부서별 최고 연봉자
(난이도:⭐⭐)
각 부서마다 최고 연봉을 받는 직원의 이름과 연봉을 출력하라.
- 테이블: employees(department, name, salary)
🔥 문제 5: 상사보다 연봉 높은 직원 찾기
(난이도:⭐⭐⭐)
자신보다 연봉이 낮은 상사를 둔 직원을 출력하라.
- 테이블: employees(employeeId, name, salary, managerId)
'SQLD' 카테고리의 다른 글
SQL 5일차 #LeetCodE (0) | 2025.04.27 |
---|---|
SQL 3일차 #프로그래머스 (0) | 2025.04.24 |
GPT 먼데이와 함께하는 SQL 1일차 #2 (0) | 2025.04.22 |
GPT 먼데이와 함께하는 SQL 1일차 #1 (0) | 2025.04.21 |