GROUP BY와 HAVING

GROUP BY와 HAVING을 활용한 데이터 그룹화 및 집계 함수 이해하기

GROUP BY를 사용하면 데이터를 특정 기준으로 그룹화할 수 있으며, HAVING 절을 통해 그룹화된 데이터에 조건을 추가할 수 있습니다. 집계 함수와 함께 사용하여 통계 정보를 얻고, GROUP BY와 ORDER BY의 차이를 이해하여 결과를 정렬할 수 있습니다.

GROUP BY와 HAVING

GROUP BY를 사용한 데이터 그룹화

SQL에서 GROUP BY 절은 데이터를 특정 컬럼을 기준으로 그룹화하여 집계 결과를 도출하는 데 사용됩니다. 이를 통해 동일한 값을 가진 행들을 묶고, 각 그룹에 대한 통계 정보를 얻을 수 있습니다. GROUP BY는 주로 집계 함수와 함께 사용되며, 예를 들어 SUM, AVG, COUNT 등의 함수를 통해 그룹화된 데이터에 대한 계산을 수행할 수 있습니다.

GROUP BY 기본 문법

GROUP BY의 기본 문법은 다음과 같습니다:

SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;

여기서 column1은 그룹화할 기준이 되는 컬럼이고, aggregate_function은 집계 함수를 의미합니다.

예제: 부서별 직원 수 조회

HR 데이터베이스의 employees 테이블을 사용하여 부서별 직원 수를 조회하는 예제를 살펴보겠습니다. 이 예제에서는 department_id를 기준으로 직원 수를 계산합니다.

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

위 쿼리는 각 부서(department_id)에 속한 직원의 수를 계산하여 employee_count라는 별칭으로 결과를 반환합니다.

예제: 부서별 평균 급여 조회

이번에는 부서별 평균 급여를 조회하는 예제를 살펴보겠습니다. 이 경우 salary 컬럼의 평균 값을 구합니다.

SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;

이 쿼리는 각 부서의 평균 급여를 계산하여 average_salary라는 별칭으로 결과를 반환합니다.

GROUP BY와 여러 컬럼 사용하기

GROUP BY는 여러 컬럼을 기준으로 그룹화할 수도 있습니다. 예를 들어, 부서와 직무를 기준으로 직원 수를 조회할 수 있습니다.

SELECT department_id, job_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id, job_id;

위 쿼리는 각 부서와 직무 조합에 대한 직원 수를 계산하여 결과를 반환합니다.

이처럼 GROUP BY를 사용하면 데이터를 효과적으로 그룹화하고, 집계 함수를 통해 다양한 통계 정보를 손쉽게 얻을 수 있습니다.

HAVING 절 사용법

HAVING 절은 SQL에서 GROUP BY로 그룹화된 데이터에 조건을 추가할 때 사용됩니다. HAVING은 집계 함수와 함께 사용되어 그룹화된 결과에 대한 필터링을 수행할 수 있습니다. WHERE 절과의 차이점은 WHERE는 그룹화 이전의 행에 대한 조건을 적용하는 반면, HAVING은 그룹화 이후의 결과에 조건을 적용한다는 점입니다.

HAVING 기본 문법

HAVING의 기본 문법은 다음과 같습니다:

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

여기서 condition은 집계 함수의 결과에 대한 조건을 의미합니다.

예제: 부서별 평균 급여가 2000 이상인 부서 조회

HR 데이터베이스의 employees 테이블을 사용하여 평균 급여가 2000 이상인 부서를 조회하는 예제를 살펴보겠습니다.

SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) >= 2000;

위 쿼리는 각 부서의 평균 급여를 계산한 후, 그 값이 2000 이상인 부서만 결과로 반환합니다.

예제: 부서별 직원 수가 3명 이상인 부서 조회

이번에는 직원 수가 3명 이상인 부서를 조회하는 예제를 살펴보겠습니다.

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
HAVING COUNT(*) >= 3;

이 쿼리는 각 부서의 직원 수를 계산한 후, 직원 수가 3명 이상인 부서만 결과로 반환합니다.

HAVING과 WHERE의 차이

HAVINGWHERE는 모두 조건을 지정하는 데 사용되지만, 적용되는 시점이 다릅니다. WHERE는 그룹화 이전의 데이터에 필터를 적용하고, HAVING은 그룹화 이후의 집계 결과에 필터를 적용합니다. 예를 들어, 특정 부서에 속한 직원만 조회하고 싶다면 WHERE를 사용하고, 그룹화된 결과에 대한 조건을 추가하고 싶다면 HAVING을 사용해야 합니다.

예제: 특정 부서의 평균 급여 조회

특정 부서(예: 부서 ID가 10인 부서)의 평균 급여를 조회하는 예제를 살펴보겠습니다.

SELECT department_id, AVG(salary) AS average_salary
FROM employees
WHERE department_id = 10
GROUP BY department_id;

위 쿼리는 부서 ID가 10인 직원들만 필터링한 후, 해당 부서의 평균 급여를 계산합니다. 만약 부서 ID가 10인 부서의 평균 급여가 2000 이상인지 확인하고 싶다면 HAVING을 사용할 수 있습니다.

SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id
HAVING department_id = 10 AND AVG(salary) >= 2000;

이렇게 HAVING 절을 사용하여 그룹화된 데이터에 대한 조건을 추가함으로써 더욱 유용한 분석을 수행할 수 있습니다.

집계 함수와 GROUP BY의 결합

SQL에서 집계 함수는 여러 행의 데이터를 단일 값으로 요약하는 데 사용됩니다. GROUP BY 절과 결합하여 특정 기준으로 그룹화된 데이터에 대한 통계 정보를 쉽게 계산할 수 있습니다. 일반적으로 사용되는 집계 함수에는 COUNT, SUM, AVG, MIN, MAX 등이 있습니다.

집계 함수의 종류

  1. COUNT: 행의 수를 계산합니다.
  2. SUM: 특정 컬럼의 합계를 계산합니다.
  3. AVG: 특정 컬럼의 평균 값을 계산합니다.
  4. MIN: 특정 컬럼의 최소 값을 찾습니다.
  5. MAX: 특정 컬럼의 최대 값을 찾습니다.

예제: 부서별 직원 수 계산

HR 데이터베이스의 employees 테이블을 사용하여 부서별 직원 수를 계산하는 예제를 살펴보겠습니다.

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

위 쿼리는 각 부서(department_id)에 속한 직원의 수를 계산하여 employee_count라는 별칭으로 결과를 반환합니다.

예제: 부서별 총 급여 계산

이번에는 부서별 총 급여를 계산하는 예제를 살펴보겠습니다. SUM 함수를 사용하여 각 부서의 급여 총합을 구합니다.

SELECT department_id, SUM(salary) AS total_salary
FROM employees
GROUP BY department_id;

이 쿼리는 각 부서의 급여 총합을 계산하여 total_salary라는 별칭으로 결과를 반환합니다.

예제: 부서별 평균 급여 계산

부서별 평균 급여를 계산하는 예제를 살펴보겠습니다. AVG 함수를 사용하여 각 부서의 평균 급여를 구합니다.

SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;

이 쿼리는 각 부서의 평균 급여를 계산하여 average_salary라는 별칭으로 결과를 반환합니다.

예제: 부서별 최고 및 최저 급여 조회

부서별 최고 급여와 최저 급여를 조회하는 예제를 살펴보겠습니다. MAXMIN 함수를 함께 사용하여 결과를 반환합니다.

SELECT department_id, MAX(salary) AS highest_salary, MIN(salary) AS lowest_salary
FROM employees
GROUP BY department_id;

위 쿼리는 각 부서의 최고 급여(highest_salary)와 최저 급여(lowest_salary)를 계산하여 결과를 반환합니다.

집계 함수와 GROUP BY의 조합

이처럼 집계 함수와 GROUP BY를 결합하면 데이터베이스에서 유용한 통계 정보를 쉽게 도출할 수 있습니다. 그룹화된 데이터에 대한 다양한 분석을 수행할 수 있으며, 이를 통해 데이터의 패턴과 트렌드를 이해하는 데 도움이 됩니다.

GROUP BY와 ORDER BY의 차이

GROUP BYORDER BY는 SQL에서 데이터를 처리할 때 사용되는 절이지만, 그 목적과 기능은 다릅니다. 각각의 역할을 이해하는 것은 데이터베이스 쿼리를 작성하는 데 매우 중요합니다.

GROUP BY의 역할

GROUP BY 절은 데이터를 특정 컬럼을 기준으로 그룹화하여 집계 결과를 생성하는 데 사용됩니다. 주로 집계 함수와 함께 사용되어 각 그룹에 대한 통계 정보를 제공합니다. 예를 들어, 부서별 직원 수를 계산하는 경우 GROUP BY를 사용하여 부서별로 데이터를 묶습니다.

예제: 부서별 직원 수 계산

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

위 쿼리는 각 부서(department_id)에 속한 직원 수를 계산하여 그룹화된 결과를 반환합니다.

ORDER BY의 역할

ORDER BY 절은 쿼리 결과를 특정 컬럼을 기준으로 정렬하는 데 사용됩니다. 기본적으로 오름차순(ASC)으로 정렬되며, 내림차순(DESC)으로도 정렬할 수 있습니다. 이 절은 결과 집합의 순서를 제어하여, 사용자가 원하는 형식으로 데이터를 표시할 수 있도록 합니다.

예제: 직원 급여를 기준으로 정렬

SELECT first_name, salary
FROM employees
ORDER BY salary DESC;

위 쿼리는 직원의 이름과 급여를 조회한 후, 급여를 기준으로 내림차순으로 정렬하여 결과를 반환합니다.

GROUP BY와 ORDER BY의 결합

GROUP BYORDER BY는 함께 사용할 수 있으며, 이 경우 먼저 데이터를 그룹화한 후, 그룹화된 결과를 정렬합니다. 예를 들어, 부서별 직원 수를 계산한 후, 직원 수를 기준으로 정렬할 수 있습니다.

예제: 부서별 직원 수를 기준으로 정렬

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
ORDER BY employee_count DESC;

위 쿼리는 각 부서의 직원 수를 계산한 후, 그 수를 기준으로 내림차순으로 정렬하여 결과를 반환합니다.

요약

  • GROUP BY: 데이터를 특정 컬럼을 기준으로 그룹화하여 집계 결과를 생성합니다.
  • ORDER BY: 쿼리 결과를 특정 컬럼을 기준으로 정렬합니다.

이 두 절은 데이터 분석에서 매우 중요한 역할을 하며, 적절히 조합하여 사용하면 더욱 유용한 결과를 얻을 수 있습니다.

Similar Posts