강의로 돌아가기
min0vv

MYSQL LIMIT 답안 공유 및 질문 (동점자도 출력하는 방법)

질문

문제는 해결했는데 동점자가 있는 경우의 쿼리를 잘 모르겠습니다.
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;
2 개의 답변
김동철
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 함수를 사용하는거 같네여

  • min0vv

    우왓 감사합니다!!

    min0vv―2024.04.19 01:00
mmkjy123@gmail.com

저는 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
);
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.