[SQL] 카테고리별 연산 - GROUP BY

2024. 8. 14. 17:17Language/SQL

 지금까지 학습한 내용으로 음식점의 음식 종류(한식, 일식 등) 별로 음식 가격의 평균을 구하면 어떨까?

SELECT cuisine_type, AVG(price)
FROM food_orders
WHERE cuisine_type = 'Korean'

 

이런식의 쿼리를 'cuisine_type' 값의 가짓수 만큼 반복해야 할 것 이다. 이는 너무 비효율적인 작업이 될 것 이다. 개발자는 어떻게든 최소한의 쿼리로 원하는 결과를 얻기 위해 노력해야 하므로 우리는 'GROUP BY' 를 알아야 한다.

 

1. 기본 문법

SELECT 카테고리화 할 컬럼명, 집계함수(계산 대상 컬럼명)
FROM 테이블명
GROUP BY 카테고리화 할 컬럼명

 

위에서 든 예시처럼 음식 종류마다 가격 평균을 구한다고 하면, '카테고리화 할 컬럼명' 에는 '음식' 에 해당하는 컬럼이 지정될 것이고, '계산 대상 컬럼명' 에는 '가격' 에 해당하는 컬럼이 지정될 것이다.

 

 

2. 사용 예시

 'customers' 테이블에서 고객의 각 성별마다 평균 나이가 어떻게 되는지 확인해 보자.

SELECT gender, AVG(age) avg_age
FROM customers
GROUP BY gender

카테고리별 연산

 

카테고리화 할 컬럼은 'gender' 로 'male, femal' 항목을 가질 것이다. 'age' 는 'AVG' 를 통해 평균을 계산할 텐데 'GROUP BY' 에 의해 카테고리 항목마다 연산이 될 것이다. 결과 이미지를 보면 카테고리 항목마다 평균 값(평균 나이)을 계산한 결과가 출력된 것을 볼 수 있다.