문제는 해결했는데 동점자가 있는 경우의 쿼리를 잘 모르겠습니다.
LIMIT나 ROWNUM으로 1개만 출력되는 쿼리 말고, 최고 점수의 동점자를 모두 출력하는 쿼리를 아시는 분은 도와주시면 감사드립니다.
-- 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보
-- GROUP BY절에 없는 컬럼을 SELECT할 경우, 오류 발생 가능하므로 유의
-- GROUP BY절에 포함해주면 해결
SELECT SUM(SCORE) SCORE, E.EMP_NO, E.EMP_NAME, E.POSITION, E.EMAIL
FROM HR_EMPLOYEES E, HR_GRADE G
WHERE E.EMP_NO = G.EMP_NO
GROUP BY E.EMP_NAME, E.EMP_NO
ORDER BY SUM(SCORE) DESC
LIMIT 1;
SELECT t2.EMP_SCORE AS SCORE, t1.EMP_NO, t1.EMP_NAME, t1.POSITION, t1.EMAIL
FROM HR_EMPLOYEES t1
JOIN (
SELECT
EMP_NO,
SUM(SCORE) AS EMP_SCORE,
RANK() OVER (ORDER BY SUM(SCORE) DESC) AS EMP_RANK
FROM HR_GRADE
GROUP BY EMP_NO
) t2 ON t1.EMP_NO = t2.EMP_NO
WHERE t2.EMP_RANK = 1;
동점자 여럿을 조회하는 경우 RANK 함수를 사용하는거 같네여
우왓 감사합니다!!
저는 WHERE절 SUBQUERY 사용해서 동점자 출력 가능하게 해봤습니다!
SELECT O.SCORE,
A.EMP_NO,
A.EMP_NAME,
A.POSITION,
A.EMAIL
FROM HR_EMPLOYEES A
JOIN (
SELECT EMP_NO, SUM(SCORE) AS SCORE
FROM HR_GRADE
GROUP BY EMP_NO
) AS O
ON A.EMP_NO = O.EMP_NO
WHERE O.SCORE = (
SELECT MAX(SCORE)
FROM (
SELECT EMP_NO, SUM(SCORE) AS SCORE
FROM HR_GRADE
GROUP BY EMP_NO
) AS Temp
);