SQL의 COUNT, MAX, MIN ,AVG

안떽왕·2023년 8월 2일
0

Count

데이터의 갯수를 세어주는 함수로 이 테이블 혹은 해당 테이블의 특정 컬럼의 데이터 갯수를 세어줍니다.

전체 테이블 조회

SELECT COUNT(*) FROM member;

특정 컬럼 조회

SELECT COUNT(height) FROM member;

count 함수는 null을 세지 않기 때문에 특정 컬럼에 null이 들어 있다면 null의 수만큼 빠진 갯수를 반환하게 됩니다.

에러사항

이와 관련해 오늘 null값이 두 개 들어간 컬럼을 count로 조회하려했는데 null값이 빠지지 않고 원래 테이블의 데이터 갯수가 나와 당황했습니다.

차분히 테이블을 뜯어보니 외부 데이터를 가지고 오면서 null이 문자열 'Null'로 들어가있는 것을 확인했습니다.

이를 확인하고 해당 컬럼의 문자열 'Null'을 null값으로 바꾸기 위해 알아본 결과

UPDATE member SET height = NULL WHERE height = 'NULL';

해당 쿼리문을 찾게 되었고 이 쿼리문을 사용해 본래 문자열인 데이터를 null로 바꿀 수 있었습니다.


MAX

해당 데이터 중 가장 높은 값을 가지는 데이터를 조회할 수 있습니다.

max함수의 경우 반드시 컬럼을 인자로 받아야하기에 *을 인자로 넣게 되면 아래와 같은 에러를 만나게 됩니다.

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM member
LIMIT 0, 200' at line 1

특정 컬럼의 최대값 조회

SELECT MAX(height) FROM member;

해당 쿼리문을 사용해 member 테이블의 height컬럼에서 가장 높은 값을 조회할 수 있습니다.

다수의 컬럼 최대값 조회

max함수는 한번에 하나의 컬럼만 처리할 수 있기에 여러 컬럼을 대상으로 최대값을 조회하고 싶다면 아래와 같이 작성할 수 있습니다.

각 컬럼의 최대값 조회

아래의 쿼리문은 age와 height 컬럼의 최대값을 각각 반환합니다.

SELECT MAX(age), MAX(height) FROM member;

각 컬럼 중 최대값 조회

아래의 쿼리문은 age와 height 컬럼 중 최대값인 하나의 값만 반환합니다.

SELECT MAX(age + height) FROM member;

MIN

해당 데이터 중 가장 낮은 값을 가지는 데이터를 조회할 수 있습니다.

MIN 역시 컬럼을 인자로 받아야하고 한번에 하나의 컬럼만 처리 가능하기 때문에 복수의 컬럼을 대상으로 하고 싶은 경우 MAX의 다수 컬럼의 조회방법과 동일하게 할 수 있습니다.

특정 컬럼의 최소값 조회

SELECT MIN(height) FROM member;

해당 쿼리문을 사용해 member 테이블의 height컬럼에서 가장 낮은 값을 조회할 수 있습니다.


AVG

해당 데이터의 평균 값을 조회할 수 있습니다.

MAX와 MIN과 마찬가지로 컬럼을 인자로 받으며 하나의 컬럼만 처리하기에 복수의 컬럼이 대상인 경우 MAX의 다수 컬럼의 조회방법과 동일하게 작성할 수 있습니다.

AVG함수가 특정 컬럼을 인자로 받았을 때 해당 컬럼에 null값이 있다면 null값은 포함하지 않고 결과를 반환합니다.

특정 컬럼의 평균값 조회

SELECT AVG(height) FROM member;

해당 쿼리문을 사용해 member 테이블의 height컬럼에서 평균값을 조회할 수 있습니다.

에러사항

count에서 마주친 것처럼 해당 컬럼의 null이 문자열 'Null'이라면 에러가 발생하지만 제가 사용했던 MySQL의 경우 문자열을 0으로 받았기 때문에 평균값이 본래 나와야할 값보다 낮게 나오는 일이 있었습니다.

count의 해결방법처럼 문자열 'Null'을 null값으로 변환해 문제를 해결했습니다.

profile
이제 막 개발 배우는 코린이

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

좋은 글 감사합니다.

답글 달기