데이터베이스

SQL (7) - GROUP BY

monstro 2025. 2. 11. 11:58
728x90
반응형

이번에는 데이터하나의 특정한 그룹으로 묶어주는 SQL의 GROUP BY 연산자를 알아보겠습니다.

GROUP BY를 사용하는 경우 조심해야 하는 것

SELECT 문에 반드시 GROUP BY의 인자로 넣어준 속성을 사용해야 하는 것입니다.

GROUP BY는 인자로 넣어준 속성에 해당하는 데이터를 동일한 하나의 그룹으로 묶어주는 연산자이므로

SELECT 연산자GROUP BY 연산자동일한 인자를 가져야 합니다.

 

1) 일반적인 GROUP BY 사용

-- 2004년도의 타율 데이터에서 teamID 별로 그룹을 만들어 teamID를 가져옴

-- 데이터를 특정한 그룹으로 묶어서 분석하기 위해 사용하는 GROUP BY 함수
SELECT teamID
FROM batting
WHERE yearID = 2004
GROUP BY teamID;

 

위의 쿼리의 경우 batting 테이블에서 yearID가 2004인 데이터들을 대상으로

동일한 teamID를 가진 경우 하나의 그룹으로 만들어 SELECT하게 됩니다.

따라서 실행 결과는 다음과 같습니다.

 

2) GROUP BY 연산자 + 집계함수

-- 2004년도의 타율 데이터에서 teamID 별로 그룹화하여 teamID / 선수 인원수 / 홈런의 총합을 가져옴

-- GROUP BY와 집계함수 같이 사용 - 1
SELECT teamID, COUNT(teamID) AS playerCount, SUM(HR) AS homeRuns
FROM batting
WHERE yearID = 2004
GROUP BY teamID;

 

위 쿼리의 실행 결과는 다음과 같습니다.

 

-- 2004년도의 타율 데이터에서 teamID 별로 그룹화하여 홈런의 총합을 가져오되, 홈런의 총합으로 내림차순 정렬

-- GROUP BY와 집계함수 같이 사용 - 2
SELECT teamID, SUM(HR) AS homeRuns
FROM batting
WHERE yearID = 2004
GROUP BY teamID
ORDER BY homeRuns DESC;

 

위의 쿼리에서 ORDER BY를 추가하여 내림차순 정렬하였습니다.

실행 결과는 다음과 같습니다.

 

 

3) GROUP BY 연산자 + HAVING 연산자를 통한 조건에 따른 그룹화

-- 2004년도의 타율 데이터를 대상으로 홈런의 총합이 200개 이상인 데이터의 teamID로 그룹을 나눠 
-- teamID와 홈런 총합을 homeRuns라는 이름으로 가져오고 내림차순 정렬

-- GROUP BY와 집계함수 같이 사용 추가적으로 HAVING 사용 
-- 조건을 걸기 위해서는 GROUP BY 다음에 HAVING을 통해 조건을 걸어야 함 
SELECT teamID, SUM(HR) AS homeRuns
FROM batting
WHERE yearID = 2004 
GROUP BY teamID
HAVING SUM(HR) >= 200
ORDER BY homeRuns DESC;

 

이전에 사용한 GROUP BY 연산자에

추가적으로 조건을 부여하는 HAVING 연산자를 사용하여 조건을 추가하였습니다.

이때 HAVING 연산자까지는 homeRuns라는 속성이 만들어지지 않아

SUM(HR)로 홈런수의 총합을 조건으로 넣어주었습니다.

 

쿼리의 실행 결과는 다음과 같습니다.

 

4) GROUP BY 연산자를 사용한 다중 속성에 대한 그룹화

-- batting 테이블에서 teamID와 yearID로 그룹화하여 teamID / yearID / 홈런의 총합을 가져오고 
-- 홈런의 총합에 따라 내림차순 정렬

-- 다중 속성에 대한 GROUP BY
-- 이때 다중 속성에 대한 GROUP BY 연산은 두 개의 속성에 해당하는 데이터가 일치해야만 GROUP BY를 수행함
SELECT teamID, yearID, SUM(HR) AS homeRuns
FROM batting
GROUP BY teamID, yearID
ORDER BY homeRuns DESC;

 

다중 속성GROUP BY를 수행하는 경우, 다중 속성이 모두 일치하는 경우에만 같은 그룹에 포함합니다.

위 쿼리의 실행 결과는 다음과 같습니다.

728x90
반응형

'데이터베이스' 카테고리의 다른 글

SQL (9) - SUBQUERY  (0) 2025.02.12
SQL (8) - 데이터 조작어(DML)  (0) 2025.02.11
SQL (6) - 집계 함수  (0) 2025.02.10
SQL (5) - CASE  (0) 2025.02.05
SQL (4) - DATETIME  (0) 2025.02.05