/*
# 그룹 함수
- 여러 행의 값을 특정 컬럼을 기준으로 그룹화 하여 결과를 얻는 함수
- 특정 집단의 총합, 개수, 평균 등을 구할 수 있다
*/
-- sum(column) : 각 그룹의 총합을 구하는 그룹 함수
SELECT sum(salary) || '$' FROM employees;
SELECT to_char(sum(salary), '999,999L') FROM employees;
-- 부서별 총 월급 구해보기
SELECT department_id, sum(salary) FROM employees GROUP BY department_id;
SELECT d.department_name, sum(salary)
FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY department_name;
-- avg(column) : 각 그룹의 평균값을 구하는 그룹 함수
-- 직책별 총 월급 구해보기
SELECT job_id, sum(salary) FROM employees GROUP BY job_id;
-- # GROUP BY로 그룹을 나누고 나면, 그룹을 나누는 기준이 되는 컬럼과 그룹 함수의 결과만 조회할 수 있다
-- max(column) : 각 그룹에서 가장 큰 값을 지닌 결과를 구하는 그룹 함수
-- min(column) : 각 그룹에서 가장 작은 값을 지닌 결과를 구하는 그룹 함수
-- count(column) : 각 그룹의 행의 개수를 구하는 그룹 함수
--(각 직책별 사원이 몇명있는가 ? / count는 대부분 별이랑 같이 씀 )
SELECT job_id, count(*) FROM employees GROUP BY job_id;
SELECT job_id, count(commission_pct) FROM employees GROUP BY job_id;
-- 연습1 : 직책별로 가장 최근에 새로운 사원이 입사한 날짜와 오래전에 입사한 날짜를 출력해보세요
SELECT job_id,max(hire_date), min(hire_date) FROM employees GROUP BY job_id;
-- 연습2: 직책별로 가장 최근에 입사한 사원의 이름/고용일/직책/월급을 출력해보세요
SELECT first_name,job_id,hire_date,salary
FROM employees WHERE (job_id,hire_date) IN (SELECT job_id,max(hire_date) FROM employees GROUP BY job_id);
-- GROUP BY에 여러 컬럼 설정해보기
SELECT job_id, department_id,MAX(salary) FROM employees GROUP BY job_id,department_id;
--GROUP BY로 그룹을 나눈 후 해당 그룹에 조건을 적용하고 싶을 때는 HAVING절을 사용한다
-- 전체 회사에 5명 이상만 존재하는 직책만 출력
SELECT job_id, count(*) FROM employees GROUP BY job_id HAVING count(*) >= 5;
-- 3명 이하인 직책만 출력
SELECT job_id,count(*) FROM employees GROUP BY job_id HAVING count(*) <= 3;
-- 월급이 5천달러 이상인 사원들이 각 부서에 몇명씩 있는지 출력
SELECT department_id, count(*) FROM EMPLOYEES WHERE salary >= 8000 GROUP BY department_id; -- 8000이하의 부서 등장도못함
-- GROUP BY와 WHERE를 같이 쓰면 WHRER가 먼저 적용된후 결과를 GROUP BY로 묶는다
-- 연습1: 부서별 최대 급여와 최소 급여를 출려하되 최대 급여가 8000이상인 부서만 출력해보세요
SELECT department_id, MAX(salary) , MIN(salary) FROM employees GROUP BY department_id HAVING MAX(salary) >= 8000;
-- 연습2: 부서별 평균 급여를 출력하되 해당 부서에 소속된 사람이
-- 10명 이상인 부서만 출력해보세요 (평균급여는 소수점 아래 두자리 까지 출력) avg
SELECT department_id, trunc(avg(salary),2), count(*) FROM employees GROUP BY department_id HAVING count(*) >= 10;
-- to_char(avg(salary), '99,999.99') 이것도 평균 월급을 띄울때 소수점을 2자리로 자를수있다
'공부 > Database 복습' 카테고리의 다른 글
6.Database 조인 (0) | 2021.08.01 |
---|---|
5.Database 정렬 (0) | 2021.07.26 |
3.Database 함수 (0) | 2021.07.19 |
2.Database WHERE (0) | 2021.07.18 |
1.데이터베이스 SELECT (0) | 2021.07.17 |