프로그래머스/My SQL

💫조건에 맞는 사원 정보 조회하기

싱싱한복초이 2024. 11. 11. 14:57

https://school.programmers.co.kr/learn/courses/30/lessons/284527

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제]

HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회하려 합니다. 2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문을 작성해주세요.

2022년도의 평가 점수는 상,하반기 점수의 합을 의미하고, 평가 점수를 나타내는 컬럼의 이름은 SCORE로 해주세요.

 

[나의 풀이]

SELECT SUM(G.SCORE) SCORE, 
G.EMP_NO, E.EMP_NAME, E.POSITION, E.EMAIL
FROM HR_EMPLOYEES E JOIN HR_GRADE G
ON E.EMP_NO=G.EMP_NO
GROUP BY EMP_NO, YEAR
ORDER BY SCORE DESC
LIMIT 1;

GROUP BY EMP_NO로만 해도 통과가 되는데 EMP_NO가 primary key라서 그런듯

 

[다른 풀이]

WITH문을 이용하여 구하는 방법

WITH    SUM_SCORES
AS      (
            SELECT  SUM(GRD.SCORE)          SCORE
                ,   EMP.EMP_NO              EMP_NO
                ,   EMP.EMP_NAME            EMP_NAME
                ,   EMP.POSITION            POSITION
                ,   EMP.EMAIL               EMAIL
            FROM    HR_EMPLOYEES            EMP
            JOIN    HR_GRADE                GRD
            ON      GRD.EMP_NO      =       EMP.EMP_NO
            WHERE   GRD.YEAR        =       '2022'
            GROUP
            BY      EMP.EMP_NO
        )

SELECT  *
FROM    SUM_SCORES
WHERE   SCORE           =       (
                                    SELECT  MAX(SCORE)
                                    FROM    SUM_SCORES
                                )
;

-참고

https://ilutoo.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A1%B0%EA%B1%B4%EC%97%90-%EB%A7%9E%EB%8A%94-%EC%82%AC%EC%9B%90-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0

 

[프로그래머스] 조건에 맞는 사원 정보 조회하기 (MySQL)

문제https://school.programmers.co.kr/learn/courses/30/lessons/284527 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘

ilutoo.tistory.com

 

SELECT 
SUM(SCORE) SCORE,
E.EMP_NO,	
EMP_NAME, POSITION,	
EMAIL
FROM  
HR_EMPLOYEES E JOIN HR_GRADE G
ON E.EMP_NO = G.EMP_NO
GROUP BY E.EMP_NO
HAVING
    SUM(SCORE) = (SELECT MAX(R.RESULT)
                  FROM (SELECT SUM(SCORE) RESULT , EMP_NO
                        FROM HR_GRADE
                        GROUP BY EMP_NO) AS R
                  )

HAVING에 조건을 MAX조건을 걸어주는 경우

-참고

https://20240228.tistory.com/202

 

[MySQL] 프로그래머스 조건에 맞는 사원 정보 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/284527 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

20240228.tistory.com