728x90

■함수

- 단일

- 그룹 : 집계

- windows함수 : 행과 행 사이

- AVG : 평균

- COUNT : 출력이 되는 행의 갯수

- MAX : 최댓값

- MIN : 최솟값

- SUM : 합계

- STDDEV : 표준편차

- VARIANCE : 배열

 

 

SUM, AVG -> (산술연산)숫자 데이터에 사용하는 함수, 문자와날짜는 사용안됨.

MIN, MAX -> 모든 데이터 타입에 사용 가능하다.(아스킬코드를 가지고 최대 최소를 구하기 때문)

COUNT -> 출력되는 테이블의 행의 수 ("  *  " 를 포함)(모든데이터 사용가능 하다)

DISTINCT 가 SELECT 앞에 나올 수 있지만

COUNT 함수 에는 ALL(DEFAULT값) 과 DISTINCT 를 사용할 수 있다.

함수가 사용하는 세부 옵션이다

SELECT 다음에 사용된 DISTINCT 출력된 결과를 중복제거

함수 안에사용되면 중복제거 후 출력된다.

-AVG

*avg함수는 null값을 제외한다.

-null값을 포함시키려면 nvl 을 사용한다!

■ Group by
 - 실행 순서 : from -> where -> group by -> select -> order by

그룹화 되지 않은 컬럼을 그룹화를 시킬 수 있음(컬럼-> 소그룹)

group by 사용하지 않으면 컬럼 전체 로 그룹1개로 되고

사용하면 소그룹이 만들어져 다수의 그룹이 만들어진다.

그룹이 만들어 지기 전에 조건이 주어져서 되지 않는다.

==>수정 후

where -> 행에 대한 조건을 줌 (그룹함수 사용하면 안됨)

having -> 그룹에 대한 조건을 줌 (항상 그룹함수가 포함되어야 함)(컬럼 연산자 값)(일반조건 사용X)

 

from(테이블을 가져옴) -> where(조건에 맞는 행을 제한) -> group by(그룸화되지않는col을 그룸화) -> having(그룹화된 컬럼에 조건은 부여) -> select (출력 명시된 col data를 결과도출)-> order by

예제1)

회사 전체의 최대 급여, 최소 급여, 급여 총 합 및 평균 급여를 출력 하시오

정답)

예제2)

각 직업별, 최대급여, 최소 급여, 급여 총 합 및 평균 급여를 출력하시오.

단 최대 급여는 MAX, 최소 급여는 MIN, 급여 총 합은 SUM 및 평균 급여는 AVG로 출력하고,

직업을 오름차순으로 정렬하시오.

정답)

예제3)

100번 부서를 제외한 각 부서별 평균 급여가 7000 이상인 부서를 출력하시오

오답)

select department_id
from employees
where department_id not in 100
group by department_id
having avg(salary) >= 7000 
/

정답)

select department_id
from employees
where department_id <> 100
group by department_id
having avg(salary) >= 7000 
/

in --> 복수일때

100번 부서가 아닐 조건이기때문에 department_id != 100, <>100 을 사용한다.

 

예제4)

50번 부서에 근무하는 매니저별 평균 급여를 출력하시오.

 

정답)

** PK를 Group by 에 쓰면 의미가 없어진다.

 

예제5)

동일한 직업을 가진 사원들의 총 수를 출력하시오

정답)

/

오답)

select job_id, count(job_id)
from employees
group by job_id
/

열머릿글 기준으로 employee_id를 사용해야한다.

 

예제6)

직원이 4명 이상인 부서의 부서번호와 인원을 출력하시오

정답)

예제7)

매니저로 근무하는 사원들의 총 수를 출력하시오

 

정답)

 

예제8)

사내의 최대 급여 및 최소 급여의 차이를 출력하시오

 

정답)

 

예제9)

매니저의 사번 및 그 매니저 밑 사원들 중 최소 급여를 받는 사원의 급여를 출력하시오

- 매니저가 없는 사람들은 제외

- 최소 급여가 5000 미만인 경우는 제외

- 급여 기준 역순으로 조회

 

정답)

* ps : 마지막 문제는 중요하니 다시한번 확인하자!

728x90

'Study > DataBase' 카테고리의 다른 글

Database기초 6일차 <서브쿼리>  (1) 2022.09.21
Database기초 6일차 <서브쿼리>  (0) 2022.09.20
Database기초 4일차 <예제 및 JOIN>  (0) 2022.09.17
DATABASE기초 3일차  (0) 2022.09.16
데이터베이스 기초 2일차  (0) 2022.09.15
복사했습니다!