티스토리 뷰
먼저, 그룹함수란 두 개 이상의 여러개의 행을 묶어서 하나의 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으로 치환해준 후, 평균을 구해주는 방법이 있습니다.
[SQL] null 값 치환하기 - NVL, NVL2 <- 참고하세요!
결과는 다음과 같습니다.
round 함수는 반올림 함수입니다.
즉, Null 을 포함하는 평균을 구하고싶다면 NVL 함수를 사용해서 평균을 구해주는게 좋겠죠?
* 주의사항
from emp;
다음 식을 작성하면, "단일 그룹의 그룹 함수가 아닙니다." 라는 Error 메시지가 출력됩니다.
그 이유, 그룹함수란 "두 개 이상의 여러개의 행을 묶어서 하나의 output 값을 리턴해주는 함수" 라고 말씀드렸죠?!
하지만, ename 은 emp 테이블에 있는 14 개의 데이터의 이름을 output해줍니다.
여기서 하나의 output 과 n개(2 이상)의 output 은 함께 출력할 수 없기때문에 저런 에러 메시지가 출력되는거죠.
그룹함수는 1개로 묶는 성향(정보의 축약), 단일행 함수는 전체 행을 출력하려는 성향이 있어서,
서로의 성향이 같지 않기 때문이죠.
결론으로, 그룹함수와 단일행함수는 함께 사용할 수 없다는 것입니다!
그러므로, 단일행 함수 대신 그룹함수 max나 min 을 사용해주면 되겠죠?
참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정
'SQL' 카테고리의 다른 글
[SQL] SQL 구문(문법) 순서 - select, from, where, group by, having, order by (8) | 2018.12.19 |
---|---|
[SQL] 그룹, 분리 조건 - group by, having (5) | 2018.12.19 |
[SQL] 조건문 - DECODE, CASE~WHEN~THEN (0) | 2018.12.19 |
[SQL] null 값 치환하기 - NVL, NVL2 (0) | 2018.12.18 |
[SQL] 문자형을 숫자형으로 변환하기 - TO_NUMBER (0) | 2018.12.18 |