GROUP BY
지금까지 GROUP BY의 경우 순서에 따라 결과가 다르게 나온다고 생각했었는데, 오늘보니 GROUP BY의 순서는 결과에 영향을 끼치지 않는 것을 알게 되었습니다. 🥺 GROUP BY에 대한 정확한 이해를 위해 정리해보는 시간을 가지려고 합니다.
SQL의 GROUP BY 절은 데이터베이스 쿼리에서 특정 필드(열)를 기준으로 데이터를 그룹화하여 집계 함수(Aggregate Function)를 적용할 때 사용됩니다. 특정 열의 값을 기준으로 데이터를 그룹으로 묶어, 각 그룹에 대해 집계 함수를 실행할 수 있게 하며, 집계 함수로는 COUNT, SUM, AVG, MAX, MIN 등이 있습니다.
기본 문법
1
2
3
4
5
| SELECT column1, column2, AGGREGATE_FUNCTION(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2
ORDER BY column1, column2;
|
- column1, column2: 그룹화 기준이 되는 열로, 여러 열을 기준으로 그룹화할 수 있습니다.
- AGGREGATE_FUNCTION(column3): 집계 함수로, 그룹화된 각 그룹에 대해 적용됩니다.
- table_name: 데이터를 조회할 테이블의 이름입니다.
- WHERE condition: 데이터를 필터링할 조건입니다.
- ORDER BY column1, column2: 결과를 정렬하는 기준입니다. 필요에 따라 사용할 수 있습니다.
예제
- 단일 열을 기준으로 그룹화
직원 테이블에서 각 부서별 직원 수를 구하기1
2
3
| SELECT department, COUNT(*)
FROM employees
GROUP BY department;
|
- 여러 열을 기준으로 그룹화
직원 테이블에서 각 부서와 직급별 직원 수 구하기1
2
3
| SELECT department, job_title, COUNT(*)
FROM employees
GROUP BY department, job_title;
|
- 집계 함수와 함께 사용
- 각 부서별 총 급여 구하기
1
2
3
| SELECT department, SUM(salary)
FROM employees
GROUP BY department;
|
- 각 부서별 평균 급여 구하기
1
2
3
| SELECT department, AVG(salary)
FROM employees
GROUP BY department;
|
- HAVING 절과 함께 사용
HAVING 절은 GROUP BY 결과에 대해 추가적인 조건을 적용할 때 사용됩니다.
WHERE 절은 그룹화 전에 데이터를 필터링하는 반면, HAVING 절은 그룹화 후에 데이터를 필터링합니다.1
2
3
4
| SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;
|
GROUP BY의 순서는 결과에 영향을 끼치지 않는 이유❗️
데이터 그룹화의 본질
GROUP BY는 특정 열의 값을 기준으로 데이터를 그룹화합니다. 예를 들어, GROUP BY A, B와 GROUP BY B, A는 동일한 그룹을 생성합니다. 그룹화의 결과는 각 그룹의 고유한 조합에 따라 결정되므로 순서가 중요하지 않습니다.
집계 함수의 독립성
집계 함수는 그룹화된 데이터에 대해 연산을 수행합니다. 예를 들어, SUM이나 COUNT와 같은 함수는 그룹 내의 데이터만을 고려하므로 그룹의 순서가 결과에 영향을 미치지 않습니다.