본문 바로가기
SQL

GROUP BY, ORDER BY 기초 및 집계함수

by 2nyong 2023. 3. 21.

앞선 포스팅에 이어서 SELECT문을 기반으로 한 데이터의 집계, 정렬 및 간단한 연산 함수들에 대해 정리한다.

 

- GROUP BY

users 테이블에는 다양한 성을 가진 유저들의 정보가 저장되어 있다. 만약 데이터베이스에 등록된 유저들의  성이 궁금할 경우 어떻게 처리할 수 있을까?

SELECT * FROM users;

 

DISTINCT를 활용해 중복을 제거하여 각각의 성씨를 확인할 수도 있겠지만, 이 방법은 각 성씨를 가진 유저의 명수를 계산하는 등의 후처리가 어렵다.

 

이 때 테이블에서 특정 그룹을 만들어 묶어주는 것이 바로 GROUP BY 이다.

SELECT * FROM users
GROUP BY name;

유저들의 성씨별로 그룹화하였다.

 

중복제거(DISTINCT)와 그룹화(GROUP BY)의 차이점을 살펴보기 위해 각 성씨를 가진 유저들의 명수를 조회해보았다.

SELECT name, COUNT(*) FROM users
GROUP BY name;

 

COUNT는 개수를 세는 집계함수로, 값이 존재하는 데이터에 대해서만 개수를 세기 때문에 NULL값이 포함되어 있다면 제외한다.

 


- ORDER BY

위와 같이 성씨별 유저수를 조회했을 때, 그 값을 순서대로 나열하고 싶다면 ORDER BY를 사용할 수 있다.

 

ORDER BY는 정렬하는데 사용하는 구문으로써, 어떤 컬럼을 기준으로 정렬할지정렬 방식(오름차순 : ASC, 내림차순 : DESC)을 함께 적어준다. 정렬 방식의 기본값은 오름차순이므로 정렬 방식을 적어주지 않을 경우 오름차순으로 정렬된다.

SELECT name, COUNT(*) FROM users
GROUP BY name
ORDER BY COUNT(*) DESC;

 

컬럼의 이름을 지정하는 구문인 AS를 활용해 COUNT(*)로 표기되던 컬럼명을 원하는대로 설정하여 조회할 수 있다.

SELECT name, COUNT(*) AS cnt FROM users
GROUP BY name
ORDER BY COUNT(*) DESC;

 


 

- MAX, MIN, SUM, AVG, ROUND

위 집계 함수는 간단한 연산을 적용하는데 사용한다. 

 

checkins 테이블은 주차별 강의를 모두 완료하고 남긴 후기(코멘트)를 저장하는 테이블이다.

 

1. MAX, MIN

checkins 테이블에서 가장 많은 좋아요를 받은 코멘트는 무엇일까?

SELECT comment, MAX(likes) FROM checkins;

 

2. SUM

주차(week)별 코멘트 수와 좋아요 수의 합계를 조회하였다. (한국사에서 구석기 시대에 대해 잘 아는 사람이 많은 이유..)

SELECT week, COUNT(*), SUM(likes) FROM checkins
GROUP BY week;

 

3. AVG

주차(week)별 평균 좋아요 점수는 몇점일까?

SELECT week, COUNT(*), SUM(likes), AVG(likes) FROM checkins
GROUP BY week;

 

4. ROUND

주차(week)별 평균 좋아요 점수를 소수점 둘째자리까지 조회하였다.

SELECT week, COUNT(*), SUM(likes), ROUND(AVG(likes), 2) FROM checkins
GROUP BY week;

'SQL' 카테고리의 다른 글

JOIN(INNER, LEFT) 기초  (2) 2023.03.21
데이터 구조  (0) 2023.03.21
WHERE문 기초  (0) 2023.03.20
SELECT문 기초  (0) 2023.03.20
SQL 이란?  (0) 2023.03.20

댓글