18강. 그룹 함수의 이해 PART 2 : 원하는 값 만들기
원하는 결과물로 데이터를 요약하기 위한 첫걸음으로 그룹 함수에 대해 학습한다.
구간 별 평균 소득 구하기
SELECT CASE WHEN SALARY <= 7000 THEN '저소득자'
WHEN SALARY <= 15000 THEN '중위소득자'
ELSE '고소득자' END AS 소득그룹
, ROUND(AVG(SALARY),2) AS 평균급여
FROM employees
GROUP BY CASE WHEN SALARY <= 7000 THEN '저소득자'
WHEN SALARY <= 15000 THEN '중위소득자'
ELSE '고소득자' END
;
이름으로 최대
SELECT first_name||' '||last_name AS NAME
FROM employees
ORDER BY NAME DESC -- DESC : 내림차순 기준 정렬, ASC : 오름차순
;
연습문제
직원의 근속연수 구간별 직원수, 평균 급여, 근속연수 구간별 최대 근속연수를 출력해보자
2021년 1월 1일 기준으로 사원들의 근속연수를 구해보자
근속연수 구간 (5년 이하, 10년 이하, 20년 이하, 20년 초과)
SELECT CASE WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) <= 5 THEN '5년 이하'
WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) <= 10 THEN '10년 이하'
WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) <= 15 THEN '15년 이하'
WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) < 20 THEN '20년 이하' ELSE '25년 초과' END AS 근속연수구간
, COUNT(*) AS 직원수
, ROUND(AVG(SALARY), 2) AS 평균급여
, MAX(ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0)) As 구간별최대근속년수
FROM employees
GROUP BY CASE WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) <= 5 THEN '5년 이하'
WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) <= 10 THEN '10년 이하'
WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) <= 15 THEN '15년 이하'
WHEN ROUND(MONTHS_BETWEEN(TO_DATE('20210101', 'YYYYMMDD'), HIRE_DATE) / 12, 0) < 20 THEN '20년 이하' ELSE '25년 초과' END

'SQL 입문' 카테고리의 다른 글
| [빡공단 28기] 베어유 하루 10분 챌린지_SQL 20일차 (0) | 2022.11.20 |
|---|---|
| [빡공단 28기] 베어유 하루 10분 챌린지_SQL 19일차 (0) | 2022.11.19 |
| [빡공단 28기] 베어유 하루 10분 챌린지_SQL 17일차 (2) | 2022.11.17 |
| [빡공단 28기] 베어유 하루 10분 챌린지_SQL 16일차 (0) | 2022.11.16 |
| [빡공단 28기] 베어유 하루 10분 챌린지_SQL 15일차 (0) | 2022.11.15 |
