Aggregate Functions
Aggregate Function(집계 함수)은 함수의 종류에 따라 통계를 내서 값으로 반환해줍니다.
AVG: avarage value
MIN: minimum value
MAX: maximum value
SUM: sum of values
COUNT: number of values
SELECT AVG (salary)
FROM instructor
WHERE dept_name = 'Comp._Sci.';
"instructor
테이블에서 소속 학과가 Comp.Sci.
인 튜플들의 평균 연봉을 계산해주세요"
SELECT COUNT (DISTINCT ID)
FROM teaches
WHERE semester = 'Spring' AND year = 2018
"teaches
테이블에서 2018년 봄학기에 해당하는 튜플들 중 중복을 제거한 ID
의 개수를 계산해주세요"
SELECT COUNT (*)
FROM course
"course
테이블의 튜플 수를 계산해주세요"
GROUP BY
집계 함수와 GROUP BY를 함께 사용하면, GROUP BY에 설정한 attribute끼리 묶어 결과를 계산한 후 relation으로 반환해줍니다.
SELECT dept_name, AVG (salary) AS avg_salary
FROM instructor
GROUP BY dept_name
"instructor
테이블에서 소속 학과별 평균 연봉을 계산한 후, (dept_name, avg_salary)
에 담아주세요"
SELECT절의 집계 함수가 아닌 부분 (위의 예시에서 dept_name
)은 GROUP BY 목록에 반드시 들어가야 합니다.
// Wrong Query
SELECT dept_name, ID, AVG (salary)
FROM instructor
GROUP BY dept_name // Error -- ID 항목이 들어가야 합니다
HAVING
HAVING은 GROUP BY에서 사용하는 조건 구문입니다.
WHERE은 집계 함수를 사용할 수 없기 때문에 HAVING을 사용해야 합니다.
SELECT dept_name, AVG (salary) AS avg_salary
FROM instructor
GROUP BY dept_name
HAVING AVG (salary) > 42000
"instructor
테이블에서 소속 학과별로 묶은 후, (dept_name, avg_salary)
에 평균 연봉이 42000보다 큰 튜플들만 담아주세요"
Nested Subqueries
SQL에선 쿼리를 중첩하여 사용할 수 있습니다.
Subquery: SELECT - FROM - WHERE
SELECT A1, A2, ..., An
FROM r1, r2, ..., rm
WHERE P
에서,
Attribute
] <operation
> (subquery
)로 대체할 수 있으며,operation
은 추후 설명합니다.