SQL 지역별 평균 레이팅 계산: GROUP BY, AVG()

습토리·2025년 2월 15일

SQL

목록 보기
6/12
post-thumbnail

1. 문제 개요

LOL 유저 테이블에서 지역(region)별 평균 레이팅(rating)을 계산하는 SQL 쿼리를 작성해 봅시다.


2. 잘못된 쿼리와 문제점

잘못된 시도:

SELECT AVG(rating ORDER BY region) AS 'average by region'
FROM lol_users;

문제점:

  1. AVG() 함수는 ORDER BY와 함께 사용할 수 없습니다.
    • AVG(rating)은 평균을 계산하는 집계 함수(Aggregate Function)이므로, 정렬 기준을 직접 넣을 수 없습니다.
  2. 지역별 평균을 구하려면 GROUP BY가 필요합니다.
    • AVG()그룹 단위로 평균을 계산할 때 GROUP BY와 함께 사용해야 합니다.

3. 올바른 정답 쿼리

SELECT region, AVG(rating) AS 'average_rating'
FROM lol_users
GROUP BY region;

📝 결과 예시:

regionaverage_rating
한국1350
미국1425

계산 과정:

  • 한국(🇰🇷): (1400 + 1300) / 2 = 1350
  • 미국(🇺🇸): (1500 + 1350) / 2 = 1425

4. GROUP BYAVG()의 원리

📌 SQL 실행 순서 (논리적 실행 순서)

  1. FROM lol_users → 테이블에서 데이터를 가져옴
  2. GROUP BY regionregion을 기준으로 데이터를 그룹화
  3. AVG(rating) → 각 그룹 내에서 평균을 계산
  4. SELECT로 결과 출력

📌 다른 집계 함수 활용 예시

함수명설명
AVG()평균값 계산
SUM()합계 계산
COUNT()개수 세기
MAX()최대값 찾기
MIN()최소값 찾기

5. 추가 개선: 지역별 평균을 소수점 2자리까지 반올림

SELECT region, ROUND(AVG(rating), 2) AS 'average_rating'
FROM lol_users
GROUP BY region;

📌 ROUND(AVG(rating), 2): 평균값을 소수점 2자리까지 반올림하여 출력합니다.


6. GROUP BY 1, Meaning

SELECT SUBSTR(email, 10) AS 'email_domain',
		AVG(age) AS 'average_of_age',
		COUNT(1) AS 'number_of_customers'
FROM customers
GROUP BY 1;

GROUP BY 1SELECT 문의 첫 번째 열(이 경우 SUBSTR(email, 10))을 기준으로 그룹화하라는 의미입니다.
처음에는 1 = * = 전체라고 생각해서 의아했어요.

profile
재미난 삶을 살다

0개의 댓글