[MySQL입문] 집계함수 (COUNT, SUM, AVG, MAX, MIN, + DISTINCT)
Categories: DB
인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
🚀 COUNT
행의 개수를 세는 집계 함수이다.
SELECT COUNT(*) --모든 행의 개수
FROM Players;
*
모든 행의 개수. 이렇게 *
을 파라미터로 받을 수 있는 집계 함수는 COUNT 가 유일하다.
SELECT COUNT(birthYear) --null 은 제외하고 카운팅
FROM Players;
COUNT를 비롯한 집계 함수들은 기본적으로 null
값은 제외하고 센다. 즉, 위 코드는 null
값을 가진 birthYead
값은 제외하고 카운팅한 결과이다.
🔥 DISTINCT
DISTINCT 뒤에 나오는 열들에 대하여 같은 값을 가진 중복된 행을 제외해준다.
모든 집계함수에 다 사용이 가능하다.
SELECT DISTINCT birthcity
FROM Players;
birthcity
값이 같은 행은 제외하고 출력한다.
SELECT DISTINCT birthyear, birthMonth, birthday
FROM Players
ORDER BY birthYear
DISTINCT birthyear, birthMonth, birthday
는 birthYear
, birthMonth
, birthday
값이 모두 같은 행들만 중복으로 친다. 즉, DISTINCT 는 그 뒤에 있는 모든 열에 적용된다. 두 행이 이 3 개의 열 값이 모두 다 똑같아야지만 중복으로 판정한다는 것.
SELECT COUNT(birthcity) --null 은 제외하고 카운팅
FROM Players;
SELECT DISTINCT COUNT(birthcity) -- COUNT 가 먼저 연산된 후 이 것에 DISTINCT 가 적용 됨
FROM Players;
두 문장의 결과는 동일하다. 왜냐하면 COUNT 가 먼저 연산되고난 이후에 DISTINCT 가 적용되기 때문에 이미 저 사진의 출력 결과(COUNT(birthcity)
의 결과)에 DISTINCT 를 적용하는 것이나 마찬가지이기 때문에 별 변화가 없는 것이다. (열 이름 없음 16108 에 DISTINCT 적용할 꼴.)
SELECT COUNT(DISTINCT birthcity) -- 따라서 DISTINC 가 안에 들어와야 함. 이게 옳은 표현!
FROM Players;
먼저 중복을 제거하고 난 후에 카운팅을 하는 것이 올바른 과정이 되므로 위와 같이 COUNT
파라미터에 DISTINCT birthcity
를 넘겨주어야 한다.
🚀 AVG, SUM
SELECT AVG(weight)
FROM Players;
SELECT SUM(weight) / COUNT(weight)
FROM Players;
위 두 코드의 결과는 같다. 모든 weight
값의 평균!
SELECT AVG(CASE WHEN weight IS NULL THEN 0 ELSE weight END)
FROM Players;
집계함수는 null 인 값은 제외하고 연산하기 때문에 AVG 도 마찬가지로 null 값을 가진 행은 제외하고 평균을 낸다. 그렇기 때문에 null 값은 0 으로 치환한 후 평균에 반영되도록 위와 같이 코드를 짤 수도 있다.
null 값들이 0 으로 치환되어 평균에 반영되니 결과 값이 더 작아진 모습!
🚀 MIN, MAX
SELECT MIN(weight), MAX(weight)
FROM Players;
MIN, MAX 는 다른 집계함수들과 달리 문자열이나 날짜에도 사용 가능하다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
Leave a comment