일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 접근제한자
- Oracle
- o(log n)
- 데이터베이스
- break
- DB
- oracle developer
- DEFAULT
- mvc디자인패턴
- DB 제약조건
- C#접근제어자
- 메이븐업데이트
- O(n)
- C언어 표준 라이브러리
- 자바
- C#접근제한자
- oracle db
- 빅오표기법
- DTO
- 자바연산자
- DAO
- JSP
- 오라클
- java접근제어자
- Vo
- java
- sql
- JavaSwing
- DATABASE
- Oracle SQL Developer
성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و
그룹 함수 (sum, avg, count, max, min) & having 본문
1027 수업내용_
#그룹 함수
- 원하는 칼럼을 기준으로 그룹을 묶어서 계산할 수 있는 함수들.
- 그룹을 묶을 때 기준이 되는 칼럼은 GROUP BY절로 설정할 수 있다.
- 그룹 함수를 사용하면 일반 칼럼은 함께 출력할 수 없다. => 00937. 00000 - "not a single-group group function"
- 그룹 함수의 결과와 그룹의 기준이 되는 칼럼만 사용할 수 있다.
-- SUM(column) : 해당 칼럼의 총합을 구해주는 그룹 함수
SELECT sum(salary) FROM employees;-- 691416 모든 사원들의 월급 총합
-- SELECT sum(salary), first_name FROM employees; >> 그룹함수를 출력하면 일반 칼럼을 출력할 수 없다.
-- 직책별 월급 총합
SELECT sum(salary), job_id FROM employees GROUP BY job_id;
-- 부서별 월급 총합
SELECT sum(salary), department_id FROM employees GROUP BY department_id;
-- avg(column) : 해당 칼럼의 평균값을 구해주는 그룹 함수
SELECT avg(salary), sum(salary), job_id FROM employees GROUP BY job_id;
-- count(column) : 해당 컬럼의 행의 개수를 구할 수 있다 (null 값은 세지 않는다)
SELECT count(commission_pct) FROM employees;
-- 커미션을 어느 부서에서 몇 명이 받고 있는지
SELECT department_id, count(commission_pct) FROM employees GROUP BY department_id;
-- max(column) : 그룹별 각 칼럼 최댓값을 구할 수 있다.
SELECT max(salary), job_id FROM employees GROUP BY job_id;
-- min(column) : 그룹별 각 칼럼 최솟값을 구할 수 있다.
SELECT min(salary), job_id FROM employees GROUP BY job_id;
-- 연습1> 각 직책별 평균연봉
-- 연습2> 각 부서별 가장 최근에 사원이 입사한 날짜와 가장 오래전 입사한 날짜 조회
# HAVING
- 그룹 함수로 묶어서 도출된 결과에 대해 조건을 적용하고 싶은 경우 사용하는 문법
- WHERE은 그룹으로 묶기 전에 적용되기 때문에 그룹 함수의 결과는 WHERE절의 조건으로 사용할 수 없다.
SELECT avg(salary), job_id FROM employees GROUP BY job_id;
-- 평균 월급이 8000$ 넘어가는 직책을 알고 싶을 때
SELECT avg(salary), job_id FROM employees WHERE salary >= 8000 GROUP BY job_id;
--이처럼 WHERE 사용한다면 groub by 전에 먼저 적용을 받기 때문에 원하지 않는 값 도출된다. 따라서 HAVING 절 사용
SELECT avg(salary), job_id FROM employees GROUP BY job_id HAVING avg(salary) >8000;
-- 평균 월급이 8000$ 넘는 사원들의 직책별 평균월급
SELECT avg(salary), job_id FROM employees WHERE salary > 8000 GROUP BY job_id;
-- 연습1> 월급이 88천 달러 이상인 사원이 3명 이상인 부서만 출력
SELECT department_id FROM employees WHERE salary >= 8000 GROUP BY department_id HAVING count(*) >= 3;
'백엔드개발 > DATABASE' 카테고리의 다른 글
Oracle/SQL - DB /DATABASE / JOIN (0) | 2023.10.31 |
---|---|
DATABASE / 데이터베이스 / 정렬(ORDER BY - ) (0) | 2023.10.31 |
DECODE, CASE (0) | 2023.10.31 |
데이터베이스 / DB 집합 / 교집합, 차집합, 합집합 (0) | 2023.10.31 |
DATABASE, DB 데이터베이스 WHERE 조건절 (BETWEEN A AND B, IN, MOD), LIKE (0) | 2023.10.31 |