250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- leetcodesql50
- 코딩테스트
- mysql
- 윈도우함수
- 활성사용자수
- GROUPBY
- with절
- 위키독스
- leetcode
- 약수구하기
- 리트코드sql
- 프로그래머스문풀
- 코테
- 프로그래머스
- UNION
- 데이터리안
- join
- levle1
- 데이터분석
- sql문풀
- SQL테스트
- 파이썬문풀
- leetcode문풀
- 서브쿼리
- 파이썬
- 셀프조인
- 문풀
- With
- SQL고득점KIT
- SQL
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] WITH절을 활용하여 평가등급 및 성과금 조회 본문
728x90
출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] : 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/284528
문제(일부): 평가등급과 성과금, 평가자 정보 조회
평가등급은 상,하반기 평균점수, 성과금 비율은 평가등급에 따라 부여됨
1. WITH절 사용
1) 상, 하반기 평균점수를 구하는 WITH절 생성2) CASE WHEN 구문으로 1)의 평균 점수에 따라 평가등급과 성과금 비율 부여
3) 2)의 with절과 평가자 테이블을 JOIN하여 정보조회
WITH AVG_SCORE AS(
SELECT EMP_NO, AVG(SCORE) AS AVG_SCORE
FROM HR_GRADE
GROUP BY EMP_NO )
, GRADE AS(
SELECT EMP_NO
, CASE
WHEN AVG_SCORE >= 96 THEN "S"
WHEN AVG_SCORE >= 90 THEN "A"
WHEN AVG_SCORE >= 80 THEN "B"
ELSE "C"
END GRADE
, CASE
WHEN AVG_SCORE >= 96 THEN 0.2
WHEN AVG_SCORE >= 90 THEN 0.15
WHEN AVG_SCORE >= 80 THEN 0.1
ELSE 0
END BONUS_PER
FROM AVG_SCORE)
SELECT G.EMP_NO
, HE.EMP_NAME
, G.GRADE
, HE.SAL * G.BONUS_PER AS BONUS
FROM GRADE G INNER JOIN HR_EMPLOYEES HE
ON G.EMP_NO = HE.EMP_NO
ORDER BY G.EMP_NO
2. 더 깔끔한 WITH절 사용풀이
CASE WHEN구문으로 등급과 등급별 성과금 비율 부여
평가자 테이블과 JOIN하여 평가자 정보 확인
2) 메인쿼리에서 WITH절의 정보를 조회
WITH EmployeeGrades AS (
SELECT
HE.EMP_NO,
HE.EMP_NAME,
HE.SAL,
AVG(HG.SCORE) AS AVG_SCORE,
CASE
WHEN AVG(HG.SCORE) >= 96 THEN 'S'
WHEN AVG(HG.SCORE) >= 90 THEN 'A'
WHEN AVG(HG.SCORE) >= 80 THEN 'B'
ELSE 'C'
END AS GRADE,
CASE
WHEN AVG(HG.SCORE) >= 96 THEN 0.2
WHEN AVG(HG.SCORE) >= 90 THEN 0.15
WHEN AVG(HG.SCORE) >= 80 THEN 0.1
ELSE 0
END AS BONUS_PER
FROM HR_EMPLOYEES HE
JOIN HR_GRADE HG ON HE.EMP_NO = HG.EMP_NO
GROUP BY HE.EMP_NO, HE.EMP_NAME, HE.SAL
)
SELECT
EG.EMP_NO,
EG.EMP_NAME,
EG.GRADE,
EG.SAL * EG.BONUS_PER AS BONUS
FROM EmployeeGrades EG
ORDER BY EG.EMP_NO;
728x90
'SQL > sql문풀' 카테고리의 다른 글
[MY SQL] 특정년도에 가입한 회원 중 구매한 회원 수, 비율 구하기 (0) | 2024.04.28 |
---|---|
[MY SQL] DENSE_RANK를 활용하여 리뷰를 가장 많이 작성한 회원의 리뷰 조회 (0) | 2024.04.27 |
[MY SQL] 언어별 개발자 분류하기_비트 연산자 활용 (0) | 2024.04.21 |
[MY SQL] 상/하반기 점수의 합이 가장 높은 사원 찾기 (1) | 2024.04.18 |
[MY SQL] WITH RECURSIVE 재귀쿼리 (0) | 2024.04.17 |