본문 바로가기

오라클

오라클 집계함수(성능이 많이 떨어짐)

-- 집계함수(성능이 많이 떨어짐)

--주의 : 집계함수는 WHERE 절에서 사용 할 수 없으며, GROUP BY를 사용하지 않는 경우 일반 컬럼과 사용불가능이며 결과는 한줄(행이 하나)로 출력된다.

COUNT : 행의 개수  (NULL은 제외)

SUM : 합

AVG :  평균  (NULL은 제외)

STDDEV :  표준편차  (NULL은 제외)

VARIANCE : 분산   (NULL은 제외)

MAX : 최대값

MIN : 최소값



--일반적으로 전체 행수를 구하기 위해서는 *, 또는 NULL을 허용하지 않는 컬럼(예:기본키)를 사용한다.

SELECT COUNT(*) FROM insa; -- 전체 행수

SELECT COUNT(num) FROM insa; -- 전체 행수

SELECT COUNT(tel) FROM insa; -- tel 컬럼 행수(NULL 제외)

SELECT COUNT(NVL(tel,'0')) FROM insa; --tel 컬럼(NULL 포함) NVL함수로 tel이 NULL인 데이터를 0으로 바꿔줬기 때문이다.


SELECT name, COUNT(*) FROM insa; -- 에러 : 일반컬럼(name 컬럼)과 사용불가


예제)

-- 서울사람은 몇명

SELECT COUNT(*) FROM insa WHERE city='서울';


-- 부서의 수는?

SELECT COUNT(buseo) FROM insa;

SELECT COUNT(DISTINCT buseo) FROM insa;


--남자와  여자인원수는 ?

SELECT COUNT( DECODE(MOD(SUBSTR(ssn, 8,1),2),1, '남')) 남자,

             COUNT( DECODE(MOD(SUBSTR(ssn, 8,1),2),0, '여')) 여자

    FROM insa;

 

-- 기본급여에 모든 집계함수를 쓰시오

SELECT SUM( basicpay),AVG(basicpay),MAX(basicpay), MIN(basicpay), MIN(basicpay), STDDEV(basicpay), VARIANCE(basicpay) FROM insa;


-- 주의

데이타)

score

90

null

90


AVG(score)--> null은 포함 하지 않고 계산 한다. 90

AVG(NVL(score , 0)) --> null을 포함하고 계산한다. 60


-- basicpay의 총합, 남자의 basicpay의 총합, 여자의 basicpay의 총합

SELECT SUM(basicpay) 총합,

      SUM(DECODE(MOD(SUBSTR(ssn, 8,1),2),1, basicpay)) 남자,

      SUM(DECODE(MOD(SUBSTR(ssn, 8,1),2),0, basicpay)) 여자

FROM insa;


SELECT '총합' title,SUM(basicpay) 금액 FROM insa

UNION

SELECT '남자' title,SUM(DECODE(MOD(SUBSTR(ssn,8,1),2),1, basicpay)) 금액 FROM insa

UNION

SELECT '여자' title,SUM(DECODE(MOD(SUBSTR(ssn,8,1),2),0,basicpay))금액 FROM insa;

=>title을 이용하여 행별로 출력이 가능하게 만들었다.