데이터베이스의 집단함수

Minsang Yu·2023년 9월 17일
0

데이터베이스에서 검색된 여러 투플들의 집단에 적용되는 함수가 집단 함수이다.

각 집단 함수는 한 릴레이션의 한 개의 애트리뷰트에 적용되어 단일 값을 반환한다.

집단 함수는 SELECT 절과 HAVING 절에서만 나타낼 수 있다.

HAVING 절은 투플들의 그룹에 적용되기 때문에 집단 함수를 HAVING 절에 명시할 수 있다.

WHERE 절은 각 투플에 적용되고, 투플들의 그룹에는 적용되지 않기 때문에 집단 함수를 사용할 수 없다.


주요 집단함수

  • COUNT(): 특정 열 또는 행의 개수를 세는 데 사용됩니다. 주로 NULL이 아닌 값의 수를 계산할 때 사용됩니다.
SELECT COUNT(*) FROM orders;
  • SUM(): 숫자 열의 합계를 계산합니다.

SELECT SUM(price) FROM products;
  • AVG(): 숫자 열의 평균 값을 계산합니다.
SELECT AVG(salary) FROM employees;
  • MIN(): 열에서 가장 작은 값을 찾습니다.
SELECT MIN(score) FROM exams;
  • MAX(): 열에서 가장 큰 값을 찾습니다.
SELECT MAX(price) FROM products;
  • GROUP BY: 데이터를 그룹화하고 그룹 내에서 집계 함수를 사용합니다. GROUP BY는 주로 집단함수와 함께 사용되며 특정 열의 고유한 값으로 결과 집합을 그룹화합니다.
SELECT department, AVG(salary) FROM employees GROUP BY department;
  • HAVING: GROUP BY와 함께 사용되며 그룹화된 데이터에 대한 조건을 설정합니다. HAVING은 WHERE 절이 아니라 GROUP BY 뒤에서 사용됩니다.
SELECT department, AVG(salary) FROM employees GROUP BY department 
HAVING AVG(salary) > 50000;
  • COUNT(DISTINCT): 중복을 제거하고 고유한 값을 가진 행의 수를 세는 데 사용됩니다.
SELECT COUNT(DISTINCT customer_id) FROM orders;

count()함수 주의사항

  • count(*) - NULL, 중복값 포함 총 갯수
  • count(attr) - NULL이 아닌것들의 갯수

그룹화

데이터베이스에서 그룹화(Grouping)는 특정 열(또는 열의 조합)의 고유한 값으로 데이터 집합을 나누는 프로세스를 의미합니다. 이렇게 나뉜 그룹은 나중에 집계 함수(예: SUM, AVG, COUNT)와 함께 사용하여 그룹 내에서 계산을 수행하거나 필터링 조건을 적용할 수 있습니다. 그룹화는 데이터베이스에서 데이터를 요약하고 분석하는 데 사용되며 보다 의미 있는 정보를 얻는 데 도움이 됩니다

이떄의 사용된 애트리뷰트를 그룹화 애트리뷰트(grouping attribute) 라고 한다.

GROUP BY 절에 사용되는 애트리뷰트는 집단 함수에 사용되지 않는 애트리뷰트 이여야 한다.

SELECT 절에는 각 그룹마다 하나의 값을 가지는 애트리뷰트, 집단함수, 그룹화에 사용된 애트리뷰트들만 나타낼 수 있다.

만일 SELECT절에 집단 함수가 포함되어 있고, GROUP BY절이 없는 경우에는 SELECT절에 집단 함수에서 참조되지 않는 애트리뷰트가 나타날 수 없다.

GROUP BY 절: GROUP BY 절은 SQL 쿼리에서 그룹화를 수행하는 데 사용됩니다. 이 절은 쿼리의 SELECT 문과 함께 사용되며 특정 열을 기준으로 데이터를 그룹화합니다.

SELECT department, AVG(salary) FROM employees GROUP BY department;

위의 예제에서는 "department" 열을 기준으로 데이터를 그룹화하고, 각 그룹 내에서 평균 급여를 계산합니다.

집계 함수와 함께 사용: 그룹화와 함께 주로 집계 함수(COUNT, SUM, AVG, MIN, MAX 등)를 사용하여 그룹 내에서 원하는 계산을 수행합니다. 이러한 집계 함수는 그룹 내에서 통계 또는 합계를 계산하는 데 사용됩니다.

SELECT department, COUNT(*) FROM employees GROUP BY department

HAVING 절

HAVING 절은 그룹화 애트리뷰트에 같은 값을 갖는 투플들의 그룹에 대한 조건을 나타내고, 이 조건을 만족하는 그룹들만 질의 결과에 나타낸다.

HAVING절에 나타나는 애트리뷰트는 반드시 GROUP BY 절에 나타나거나 집단 함수에 포함
되어야 한다.

WHERE 절과 비슷하지만 WHERE 절은 투플들을 걸러내고 HAVING 절은 그룹들을 걸러낸다는 점이 다르다.

만일 HAVING 절은 사용하지만 GROUP BY 절을 생략하면 WHERE 절을 만족하는 투플들의 집합을 하나의 그룹으로 취급한다. 이 경우 HAVING 절은 추가적인 WHERE동작한다.

SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 50000;
profile
Jr. DataEngineer

0개의 댓글