데이터베이스에서 검색된 여러 투플들의 집단에 적용되는 함수가 집단 함수이다.
각 집단 함수는 한 릴레이션의 한 개의 애트리뷰트에 적용되어 단일 값을 반환한다.
집단 함수는 SELECT
절과 HAVING
절에서만 나타낼 수 있다.
HAVING
절은 투플들의 그룹에 적용되기 때문에 집단 함수를 HAVING
절에 명시할 수 있다.
WHERE
절은 각 투플에 적용되고, 투플들의 그룹에는 적용되지 않기 때문에 집단 함수를 사용할 수 없다.
SELECT COUNT(*) FROM orders;
SELECT SUM(price) FROM products;
SELECT AVG(salary) FROM employees;
SELECT MIN(score) FROM exams;
SELECT MAX(price) FROM products;
SELECT department, AVG(salary) FROM employees GROUP BY department;
SELECT department, AVG(salary) FROM employees GROUP BY department
HAVING AVG(salary) > 50000;
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
절에 나타나는 애트리뷰트는 반드시 GROUP BY
절에 나타나거나 집단 함수에 포함
되어야 한다.
WHERE
절과 비슷하지만 WHERE
절은 투플들을 걸러내고 HAVING
절은 그룹들을 걸러낸다는 점이 다르다.
만일 HAVING
절은 사용하지만 GROUP BY
절을 생략하면 WHERE
절을 만족하는 투플들의 집합을 하나의 그룹으로 취급한다. 이 경우 HAVING
절은 추가적인 WHERE
동작한다.
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 50000;