subindev 님의 블로그

2025.01.07(화) 1일 1쿼리 본문

데이터 베이스/SQL - 1일 1쿼리

2025.01.07(화) 1일 1쿼리

subindev 2025. 1. 7. 14:32
Quiz 1) 'Development' 부서에서 현재 월급을 가장 많이 받는 직원의 이름과 그 연봉을 출력하라.
SELECT 
  CONCAT(e.first_name, ' ', e.last_name) as 'Name', 
  s.salary
FROM dept_emp as de 
JOIN departments as d ON de.dept_no = d.dept_no
JOIN salaries as s ON de.emp_no = s.emp_no
JOIN employees as e ON e.emp_no = s.emp_no
WHERE dept_name= 'Development' 
  AND s.to_date = '9999-01-01' # 현재 급여
  AND de.to_date= '9999-01-01' # 현재 부서
ORDER BY salary DESC 
LIMIT 1;



Quiz 2) 나이가 가장 많은 직원의 현재 부서와 직급 그리고 이름은? (여러명이라면 여러명 출력)
SELECT 
  dept_name as '부서', 
  title as '직급', 
  CONCAT (e.first_name, ' ', e.last_name) as '이름'
FROM employees as e
JOIN dept_emp as de ON de.emp_no = e.emp_no
JOIN departments as d ON d.dept_no = de.dept_no
JOIN titles as t ON t.emp_no = e.emp_no
WHERE birth_date = (
  SELECT DISTINCT birth_date FROM employees ORDER BY birth_date LIMIT 1
)
  AND t.to_date = '9999-01-01'
  AND de.to_date = '9999-01-01';

 

아래 처럼 MIN() 함수 이용 가능

SELECT 
    d.dept_name AS '부서',
    t.title AS '직급',
    CONCAT(e.first_name, ' ', e.last_name) AS '이름'
FROM employees AS e
JOIN dept_emp AS de ON e.emp_no = de.emp_no
JOIN departments AS d ON d.dept_no = de.dept_no
JOIN titles AS t ON e.emp_no = t.emp_no
WHERE e.birth_date = (
    SELECT MIN(birth_date) FROM employees # 이처럼 MIN() 함수 이용 가능
)
AND de.to_date = '9999-01-01'
AND t.to_date = '9999-01-01';

'데이터 베이스 > SQL - 1일 1쿼리' 카테고리의 다른 글

2025.01.09(목) 1일 1쿼리  (0) 2025.01.09
2025.01.08(수) 1일 1쿼리  (0) 2025.01.08
2025.01.06(월) 1일 1쿼리  (0) 2025.01.06
2025.01.05(일) 1일 1쿼리  (0) 2025.01.05
2025.01.04(토) 1일 1쿼리  (0) 2025.01.04