티스토리 뷰

반응형

먼저, 그룹함수란 두 개 이상의 여러개의 행을 묶어서 하나의 output 값을 리턴해주는 함수입니다.
예를 들자면, 합: sum, 평균: average 같은 함수를 말합니다.

 

 

카운트 - COUNT

 

COUNT(컬럼명) :: 특정 컬럼 값이 NULL 인 값을 제외한 데이터의 개수 리턴

COUNT(*) :: NULL 값을 포함한 데이터의 개수 리턴

 

COUNT 함수는 어디에 쓰냐! 하믄,,

나중에 배울 group by 함수와 함께 사용하면, 남녀 성별 카운트를 확인할 수 있답니다.

 

현업에서 대량의 데이터를 모두 조회하는데, 데이터가 몇 억개정도 있다고하면..

CPU가 부글부글 할 것입니다.

그럴 때 미리 COUNT 함수를 사용해서 데이터의 개수를 확인한 후 필요한 데이터만 추출하여 조회한다면

CPU도 아주 좋아하겠죠?

 

실제로 사용해보면, 전체 컬럼, 특정 컬럼이 총 몇 행이 있는지 확인할 수 있습니다.


  
합 - SUM

 

SUM(컬럼명) :: 컬럼의 데이터 타입이 숫자일 때, 특정 컬럼 값이 NULL 인 값을 제외한 모든 데이터의 합을 리턴


 

 

곱 - AVG

AVG(컬럼명) :: 컬럼의 데이터 타입이 숫자일 때, 특정 컬럼 값이 NULL 인 값을 제외한 든 데이터의 평균을 리턴

 

만일, 보너스를 받은 직원이 4명이라면,

AVG 함수만 사용했을 때, 보너스를 받은 4명의 데이터 평균이 리턴됩니다.

* 정말 주의해야하는 부분이라고 합니다!!, Null 값을 제외한 평균이지 전체 평균이 아니기 때문에!


전체 직원의 보너스 평균을 구하려면

'SUM 함수를 사용해서 전체 직원 보너스의 합 / 전체 직원의 수' 를

해주는 방법이 있지만, 좀 더 간편하게 하는 방법으로는

Null(보너스가 없는 직원) 인 값을 NVL 함수를 사용해서 0으로 치환해준 후, 평균을 구해주는 방법이 있습니다.

 

결과는 다음과 같습니다.

round 함수는 반올림 함수입니다.

 

즉, Null 을 포함하는 평균을 구하고싶다면 NVL 함수를 사용해서 평균을 구해주는게 좋겠죠?

 

* 주의사항

select avg(nvl(comm, 0)), ename
from emp;

다음 식을 작성하면, "단일 그룹의 그룹 함수가 아닙니다." 라는 Error 메시지가 출력됩니다.

그 이유, 그룹함수 "두 개 이상의 여러개의 행을 묶어서 하나의 output 값을 리턴해주는 함수" 라고 말씀드렸죠?!

하지만, ename 은 emp 테이블에 있는 14 개의 데이터의 이름을 output해줍니다.

여기서 하나의 output n개(2 이상)의 output 은 함께 출력할 수 없기때문에 저런 에러 메시지가 출력되는거죠.

 

그룹함수는 1개로 묶는 성향(정보의 축약), 단일행 함수는 전체 행을 출력하려는 성향이 있어서,

서로의 성향이 같지 않기 때문이죠.

결론으로, 그룹함수와 단일행함수는 함께 사용할 수 없다는 것입니다!

 

그러므로, 단일행 함수 대신 그룹함수 max나 min 을 사용해주면 되겠죠?





참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday