[PROGRAMMERS] SQL 고득점 Kit - GROUP BY (MySQL, Oracle)

HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회하려 합니다. 2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문을 작성해주세요.
2022년도의 평가 점수는 상,하반기 점수의 합을 의미하고, 평가 점수를 나타내는 컬럼의 이름은 SCORE로 해주세요.

 

LIMIT을 쓸 때 가장 큰 값을 구할 거면 desc!

 

-- MySQL

SELECT SUM(g.score) AS score, g.emp_no, e.emp_name, e.position, e.email
FROM hr_grade g
INNER JOIN hr_employees e
ON e.emp_no = g.emp_no
GROUP BY emp_no, year
HAVING year = '2022'
ORDER BY score desc
LIMIT 1;

 

SELECT 
    SUM(g.score) AS score, 
    g.emp_no, 
    e.emp_name, 
    e.position, 
    e.email
FROM 
    hr_grade g
INNER JOIN 
    hr_employees e ON e.emp_no = g.emp_no
WHERE 
    g.year = 2022
GROUP BY 
    g.emp_no, e.emp_name, e.position, e.email
ORDER BY 
    score DESC
LIMIT 1;

 

- HAVING 대신 WHERE을 먼저 사용해서  HR_GRADE 테이블에서 2022년도 데이터만 선택하도록 필터링합니다

- GROUP BY g.emp_no, e.emp_name, e.position, e.email: SELECT 절에 있는 집계 함수(SUM)가 아닌 모든 컬럼(emp_no, emp_name, position, email)은 GROUP BY 절에 명시적으로 포함되어야 합니다. 그렇지 않으면 데이터베이스 시스템에 따라 오류가 발생하거나 예상치 못한 결과가 나올 수 있습니다