[DataBase] SQL Aggregate Functions

1 minute read

[DataBase] SQL Aggregate Functions

Aggregate Functions


  • 관계 열의 다중 값 집합에 대해 작동하고 값을 반환합니다.

    • avg : 평균값
    • min : 최소값
    • max : 최대값
    • sum : 합계
    • count : 값의 개수

Avg

  • Computer Science 부서(department)의 강사(instructors)의 평균 급여(salary) 찾기
select avg (salary) /* avg (salary) : DBMS가 주는 임의의 이름 */
from instructor
where dpet_name = 'Comp. Sci.'

select avg (salary) as avg_salary
from instructor
where dept_name = 'Comp. Sci.'

Count

  • course 관계에 tuples의 수를 찾기
select count (*)
from course;
  • 2010년 봄의 과정을 가르치는 instructors의 전체 수 찾기
select count(distinct ID)
from teaches 
where semester = 'Spring' and year = 2010

select count(ID)
from teaches
where semester = 'Spring' and year = 2010

Max / Min / Sum

  • Max : 최대값
select name, max(salary)
from instructor;
  • Min : 최소값
select name, min(salary)
from instructor;
  • Sum : 합
select sum(salary)
from instructor;

Group By

  • 각 부서 (department)에 강사 (instructors)의 평균 급여 (salary)를 찾아라
select dept_name, avg(salary)
from instructor
group by dept_name;

Step1) instructor relation -> instructor relation을 dept_name으로 그룹화

Step2) 각 그룹의 salary를 평균화해서 출력

  • 예)

    select dept_name, count(*)
    from instructor
    group by dept_name
    
    • 부서를 그룹화 해서 부서 이름과 부서의 강사 수를 출력

Having Clause

  • 튜플이 아닌 그룹에 적용되는 조건

  • 예) 평균 급여가 42000보다 큰 모든 부서의 이름과 평균 급여를 찾습니다.

    select dept_name, avg (salary)
    from instructor
    /* where dept_name != 'Physics' */
    group by dept_name
    having avg(salary) > 42000
    
    • 그룹을 형성하기 전에 where 절의 술어가 적용됩니다.
    • having 절의 술어는 그룹 형성 후 적용됩니다.

Aggregation


  • 집계 함수 외부의 select 절에 있는 속성은 목록별로 그룹화 되어야합니다.

    /* erroneous query */
    select dept_name, ID, avg(salary)
    from instructor
    group by dept_name;
      
    select dept_name, ID, avg(salary)
    from instructor
    group by dept_name, ID;
    

Null Values and Aggregates


  • 모든 급여 합계

    select sum(salary)
    from instructor
    
    • 위의 문은 null 금액을 무시합니다.
    • null이 아닌 금액이 없으면 결과는 null입니다.
  • count(*)를 제외한 모든 aggregate(집계) 작업은 aggregated(집계된) 속성에서 null 값이 있는 튜플을 무시합니다.

  • 컬렉션에 null 값만 있으면 어떻게 되나요?

    • count는 0을 반환합니다
    • 다른 모든 집계는 null을 반환합니다.
  • 예 )

    create table temp (
        id varchar(8) primary key,
        salary int
    ); /* Empty relation */
    
    • select count (*) from temp -> 0
    • select sum(salary) from temp -> NULL

Leave a comment