[SQL] 연습 문제 모음2

2025. 3. 4. 17:23SQL

 

🔒 문제

다음과 같은 테이블 구조를 고려합니다.
Employees 테이블

employee_id	name	department_id	salary	hire_date
101	John	1	5000	2020-01-10
102	Alice	2	7000	2019-03-25
103	Bob	1	6000	2018-07-11
104	Charlie	3	4500	2021-08-19
105	David	2	8000	2017-12-05
Departments 테이블

department_id	department_name
1	HR
2	Engineering
3	Sales


1. 각 부서별 평균 급여를 계산하고, 해당 부서에서 급여가 평균 급여보다 높은 직원들의 이름과 급여를 출력하세요.

2.각 부서별로 최고 급여를 받는 직원의 이름과 급여를 출력하세요. 만약 여러 명이 최고 급여를 받는다면 모두 출력해야 합니다.

3.전체 직원들 중에서 입사일이 가장 늦은 직원의 이름과 입사일을 출력하세요.
전체 급여의 합을 구하고, 그 합에서 각 직원의 급여가 차지하는 비율을 계산하여, 이름과 급여 비율을 출력하세요.

 

🔓 내가 푼 답

더보기
더보기

1. 
WITH department_avg_salary AS (
    SELECT d.department_id, AVG(e.salary) AS avg_salary
    FROM Departments d
    JOIN Employees e ON d.department_id = e.department_id
    GROUP BY d.department_id
)
SELECT e.name, e.salary
FROM Employees e
JOIN department_avg_salary a ON e.department_id = a.department_id
WHERE e.salary > a.avg_salary;

2.
WITH department_max_salary AS (
    SELECT department_id, MAX(salary) AS max_salary
    FROM Employees
    GROUP BY department_id
)
SELECT e.name, e.salary, e.department_id
FROM Employees e
JOIN department_max_salary d ON e.department_id = d.department_id
WHERE e.salary = d.max_salary;

3.
WITH total_salary AS (
    SELECT SUM(salary) AS total_salary
    FROM Employees
)
SELECT e.name, e.salary, (e.salary / t.total_salary) * 100 AS salary_percentage
FROM Employees e, total_salary t;

 

'SQL' 카테고리의 다른 글

[LeetCode] 185. Department Top Three Salaries  (0) 2025.03.10
[SQL] 연습 문제 모음5  (0) 2025.03.10
[SQL] 문제 풀이 모음4  (0) 2025.03.06
[SQL] 연습 문제 모음3  (0) 2025.03.04
[SQL] 연습 문제 모음1  (0) 2025.03.04