[MySQL입문] 집계함수 (COUNT, SUM, AVG, MAX, MIN, + DISTINCT)

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

🚀 COUNT

행의 개수를 세는 집계 함수이다.

SELECT COUNT(*) --모든 행의 개수
FROM Players;

image

* 모든 행의 개수. 이렇게 * 을 파라미터로 받을 수 있는 집계 함수는 COUNT 가 유일하다.

SELECT COUNT(birthYear) --null 은 제외하고 카운팅
FROM Players;

image

COUNT를 비롯한 집계 함수들은 기본적으로 null 값은 제외하고 센다. 즉, 위 코드는 null 값을 가진 birthYead 값은 제외하고 카운팅한 결과이다.


🔥 DISTINCT

DISTINCT 뒤에 나오는 열들에 대하여 같은 값을 가진 중복된 행을 제외해준다.

모든 집계함수에 다 사용이 가능하다.

SELECT DISTINCT birthcity
FROM Players;

image

birthcity 값이 같은 행은 제외하고 출력한다.

SELECT DISTINCT birthyear, birthMonth, birthday
FROM Players
ORDER BY birthYear

image

DISTINCT birthyear, birthMonth, birthdaybirthYear, birthMonth, birthday 값이 모두 같은 행들만 중복으로 친다. 즉, DISTINCT 는 그 뒤에 있는 모든 열에 적용된다. 두 행이 이 3 개의 열 값이 모두 다 똑같아야지만 중복으로 판정한다는 것.

SELECT COUNT(birthcity) --null 은 제외하고 카운팅
FROM Players;

SELECT DISTINCT COUNT(birthcity) -- COUNT 가 먼저 연산된 후 이 것에 DISTINCT 가 적용 됨
FROM Players;

image

두 문장의 결과는 동일하다. 왜냐하면 COUNT 가 먼저 연산되고난 이후에 DISTINCT 가 적용되기 때문에 이미 저 사진의 출력 결과(COUNT(birthcity)의 결과)에 DISTINCT 를 적용하는 것이나 마찬가지이기 때문에 별 변화가 없는 것이다. (열 이름 없음 16108 에 DISTINCT 적용할 꼴.)

SELECT COUNT(DISTINCT birthcity) -- 따라서 DISTINC 가 안에 들어와야 함. 이게 옳은 표현!
FROM Players;

먼저 중복을 제거하고 난 후에 카운팅을 하는 것이 올바른 과정이 되므로 위와 같이 COUNT 파라미터에 DISTINCT birthcity를 넘겨주어야 한다.

image


🚀 AVG, SUM

SELECT AVG(weight)
FROM Players;
SELECT SUM(weight) / COUNT(weight)
FROM Players;

image

위 두 코드의 결과는 같다. 모든 weight 값의 평균!

SELECT AVG(CASE WHEN weight IS NULL THEN 0 ELSE weight END)
FROM Players;

집계함수는 null 인 값은 제외하고 연산하기 때문에 AVG 도 마찬가지로 null 값을 가진 행은 제외하고 평균을 낸다. 그렇기 때문에 null 값은 0 으로 치환한 후 평균에 반영되도록 위와 같이 코드를 짤 수도 있다.

image

null 값들이 0 으로 치환되어 평균에 반영되니 결과 값이 더 작아진 모습!


🚀 MIN, MAX

SELECT MIN(weight), MAX(weight)
FROM Players;

image

MIN, MAX 는 다른 집계함수들과 달리 문자열이나 날짜에도 사용 가능하다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

DB 카테고리 내 다른 글 보러가기

댓글 남기기