이번 시간에는 SQL의 컬럼 함수에 대해 알아보겠습니다. 여러 개의 컬럼 함수(Column Function) 중에서 자주 사용되는 다섯 가지 정도만 실습하도록 하겠습니다.
컬럼 함수는 대개 계산과 연관된 것으로 오라클과 같은 데이터베이스에서는 그 활용도가 다소 낮은 부분이라고 할 수 있습니다. 그러나 기본적으로 알고는 계셔야 합니다. 간혹 필요하니까요.

- Column Functions의 뜻과 특성을 먼저 알아봅시다.
- 컬럼 함수는 컬럼에 적용되는 함수입니다.
- 컬럼 함수를 적용하면 검색 결과로 하나의 Row(레코드)만 Return합니다.
이와는 다르게 다음 시간에 배울 스칼라 함수는 검색 결과로 여러 개의 레코드를 표시합니다. - 컬럼 함수를 적용하기 전에 WHERE 절의 조건에 만족한 ROW에 대해서만 함수가 적용됩니다.
- 만약 Column내에 NULL 값이 있다면 그 Row는 포함시키지 않습니다.
- Column Function는 아래와 같은 것들이 있는데, 이름만 봐도 그 기능을 짐작할 수 있습니다. 개수를 구하는 COUNT, 평균을 구하는 AVG, 최대값은 MAX 등인데 그 결과로 당연히 하나의 결과만 나오겠죠. 평균이 여러 개이고 최대값이 여러 개일 수는 없으니까요.
- COUNT(a) a Column의 행의 수를 구합니다.
- AVG(a) a Column의 평균을 구합니다.
- SUM(a)) a Column의 합계를 구합니다.
- MIN(a)) a Column의 최소값을 구합니다.
- MAX(a)) a Column의 최대값을 구합니다.
- STDDEV(a)) a Column의 표준편차를 구합니다.
- VARIANCE(a)) a Column의 분산을 구합니다.
대표적인 몇 가지만 실습해 볼까요.
- 먼저 최소값을 구하는 MIN 함수입니다.
- MIN 함수는 검색 결과 값 중 가장 작은 값을 Return합니다.(즉 검색 결과 중 가장 작은 값을 찾아 보여 줍니다.)
- MIN 함수는 모든 Data 형에 사용할 수 있는데,
- 만약 컬럼의 데이터가 숫자형(numeric)이면 가장 작은 수를
- 문자형(character)이면 ASCII 코드 순으로 가장 작은 값을
- 날짜형(date)이면 현재로부터 가장 오래된 시간을 찾아 표시합니다.
- NULL 값은 무시합니다.
- 실습해 봅시다. VIDEO 테이블에서 PLAY_TIME이 150 이상인 것 중에서 VIDEO_NO가 가장 작은 값을 구하려면….. 아래와 같이 하면 됩니다.
SELECT MIN(VIDEO_NO)
FROM VIDEO
WHERE PLAY_TIME >= 150;SQL*Plus를 실행해 직접 실습해 보세요.(아래에서 설명하는 다른 함수들도 한번씩은 꼭 실습해 보세요.)

- 최대값을 구하는 MAX 함수가 있는데, MIN 함수의 반대라고 생각하면 되죠.
실습은 생략하겠습니다. - 평균을 구하는 AVG 함수입니다.
- AVG 함수는 대상 Column의 평균값을 구해서 Return합니다.
- AVG함수는 숫자형(Numeric) 데이터를 가진 Column에만 사용할 수 있습니다.
- 만약 중복된 값이 있는 경우 중복된 값은 한번만 적용하게 하려면 앞서 다룬 Keyword인 Distinct를 사용하면 됩니다.
- AVG 함수도 NULL 값은 무시합니다.(즉 평균을 구할 때 NULL 값이 있는 데이터는 무시하고 구합니다.)
- VIDEO 테이블에서 PLAY_TIME의 평균을 구하려면…
SELECT AVG( PLAY_TIME )
FROM VIDEO; - PLAY_TIME 중에서 중복된 값은 한번만 적용하여 다시 평균을 구하려면…
SELECT AVG(DISTINCT PLAY_TIME )
FROM VIDEO;
- 합계를 구하는 SUM 함수에 대해 알아보죠.
- 대상 Column의 합계를 Return합니다.
- SUM 함수는 숫자형(Numeric) 데이터가 있는 Column에만 사용할 수 있습니다.
- AVG와 마찬가지로 중복된 값이 있는 경우 한번만 적용하게 하려면 Distinct 키워드를 사용하면 됩니다.
- SUM 함수도 NULL 값은 무시합니다.
- VIDEO 테이블에서 PLAY_TIME의 전체 합계를 구해보세요.
SELECT SUM( PLAY_TIME )
FROM VIDEO; - PLAY_TIME이 같은 값은 한번만 적용하여 전체 합계를 다시 구하려면…
SELECT SUM( DISTINCT PLAY_TIME )
FROM VIDEO;
- 마지막으로 행의 개수를 구하는 COUNT 함수입니다.
- COUNT 함수는 조건에 만족하는 모든 Row(레코드)의 개수를 Return합니다.
- 모든 데이터 형의 Column에 사용할 수 있습니다.
- COUNT(column_name)을 사용하면 특정 Column의 개수를 구하고
- COUNT(*)와 같이 사용하면 테이블 전체 Row(레코드)의 수를 구할 수 있습니다.
- 중복된 값이 있는 레코드를 한번만 적용하게 하려면 Distinct를 사용하여 중복된 레코드를 제외한 전체 레코드의 개수를 구할 수 있습니다.
- COUNT 함수도 NULL 값은 무시합니다.
- VIDEO 테이블의 전체 행(레코드)의 수를 구하려면…
SELECT COUNT( * )
FROM VIDEO; - VIDEO 테이블에서 PLAY_TIME에 값이 있는 행의 수를 구하되 PLAY_TIME이 같은 값이 여러 개일 경우 하나로 취급하여 개수를 구하려면…
SELECT COUNT( DISTINCT PLAY_TIME )
FROM VIDEO;
전체적으로 이해하기가 어렵지 않은 내용이었을 것입니다.
이상 토요일 저녁, 동주 아빠 손병목이었습니다.
