상용 그룹 함수count-avg-sum-max-min

4760 단어 count
그룹 함수도 다행 함수라고 하는데 한 그룹의 데이터를 연산하는 데 쓰인다. 한 그룹의 데이터(여러 줄이 기록한 같은 필드에서 얻은 것)에 대해 회사 전체 직원의 임금 총계, 최고 임금, 최저 임금, 각 부서의 직원 평균 임금(부서별로 그룹을 나누는 것) 등을 계산하는 결과만 되돌려준다.그룹 함수는 실제적으로 데이터 통계 기능을 제공하기 때문에 통계 함수라고도 부른다.Oracle 상용 그룹 함수는 다음과 같습니다: 상용 그룹 함수 함수 기능은 적용 유형 avg() 계산 평균값 수치형count() 조회에서 얻은 기록 행수 모든 형식 데이터 max() 계산 최대값 모든 형식 데이터min()최소값의 모든 종류의 데이터sum() 구화 수치형SELECT avg(sal), max(sal),min(sal),sum(sal)FROM emp를 계산한다.SELECT max(hiredate), min(hiredate) FROM emp; SELECT max(ename), min(ename) FROM emp; 문자형 데이터 값은 사전 순서가 후자보다 크다.날짜/시간형 데이터 값은 늦은 것이 크다.
count 함수의 용법은 상대적으로 복잡한데 그 문법 형식은 다음과 같은 세 가지를 포함한다.count(*)는 그룹의 총 기록 수를 되돌려줍니다.count(exp)는 표현식exp값이 비어 있지 않은 기록 수를 되돌려줍니다.count (DISTINCT (exp) 는 표현식exp 값이 중복되지 않고 비어 있는 기록 수를 되돌려줍니다.예를 들어 다음의 SELECT 문구는 조회emp표의 총 기록 행수(직원 총수), 조회comm 필드 값이 비어 있는 기록 행수(비어 있는 직원 수를 보조), 조회deptno 필드 값이 중복되지 않고 비어 있는 기록 행수(부서 수, 현재 총 번호가 각각 10, 20, 30의 3개 다른 부서) 등 기능을 실현했다.SELECT count(*) FROM emp; SELECT count(comm) FROM emp; SELECT count(DISTINCT(deptno)) FROM emp;
그룹 함수 중의 빈 값은 그룹 함수가 되돌아오는 결과가 단행 데이터가 아니라 줄 그룹(다행 데이터)을 바탕으로 계산된 것이기 때문에 그룹 함수와 단행 함수의 차이가 비교적 크고 빈 값 데이터의 처리도 마찬가지다.COUNT(*)를 제외한 모든 그룹 함수는 빈 값을 무시합니다.예를 들면 다음과 같습니다.
SELECT * FROM emp; 

EMPNO	ENAME	JOB	MGR	 HIREDATE	SAL	 COMM	 DEPTNO

7369	 SMITH	 CLERK7902	 1980/12/17	800.00	 20

7499	 ALLEN	 SALESMAN7698	1981/2/20	1600.00	300.00	 30

7521	 WARD	 SALESMAN7698	1981/2/22	1250.00	500.00	 30

7566	 JONES	 MANAGER7839	1981/4/2	2975.00	 20

7654	 MARTIN	SALESMAN7698	1981/9/28	1250.00	1400.00	30

7698	 BLAKE	 MANAGER7839	1981/5/1	2850.00	 30

7782	 CLARK	 MANAGER7839	1981/6/9	2450.00	 10

7788	 SCOTT	 ANALYST7566	 1987/4/19	3000.00	 20

7839	 KING	 PRESIDENT	 1981/11/17	5000.00	 10

7844	 TURNER	SALESMAN7698	1981/9/8	1500.00	0.00	 30

7876	 ADAMS	 CLERK	7788	 1987/5/23	1100.00	 20

7900	 JAMES	 CLERK	7698	 1981/12/3	 30

7902	 FORD	 ANALYST7566	 1981/12/3	3000.00	 20

7934	 MILLER	CLERK	7782	 1982/1/23	1300.00	 10

SELECT sum(comm), avg(comm) FROM emp; 

SUM(COMM)	AVG(COMM)

2200	 550

SELECT COUNT(*),COUNT(COMM) FROM EMP;

COUNT(*)	COUNT(COMM)

14	 4


이를 통해 알 수 있듯이 그룹 함수sum(comm)는 비어 있지 않은comm 필드 값(300+500+1400+0)을 구하는 것으로 모든comm 필드 값이 비어 있는 기록 줄을 필터하거나 무시하는 것과 같다.avg(comm)의 경우 sum(comm)/count(comm)가 아니라 sum(comm)/count(*)와 같은 효과가 있다.마찬가지로 그룹 함수의 매개변수가 단일 필드가 아닌 표현식이면 표현식 결과의 빈 값이 무시됩니다. 예를 들어,
SELECT sum(sal), sum(comm), sum(sal+comm), sum(sal)+sum(comm) FROM emp; 그 중에서sum(sal+comm)은 임금과 보조가 모두 공짜가 아닌 직원의 총수입(sal,comm에 공짜NULL이 있다면 이 은행은 무시한다)을,sum(sal)+sum(comm)은 공짜가 아닌 직원의 임금 총합에 보조가 공짜가 아닌 직원의 보조 총계를 집계한다.그룹 함수 조회에서 되돌아오는 줄이 없거나 빈 값만 있을 경우 (그룹 함수의 매개 변수 표현식은 모두 빈 값) 그룹 함수는 빈 값을 되돌려줍니다.예: DROP TABLE e1;CREATE TABLE e1(name VARCHAR2(20), sal NUMBER(8,2)); --그룹에는 0줄 레코드가 포함되어 있으며, 그룹 함수sum(sal)과 avg(sal)는 모두 빈 값인 SELECT sum(sal), avg(sal) FROM e1을 반환합니다. -INSERT INTO e1 VALUES('RUSKY',NULL);--INSERT INTO e1 VALUES('RUSKY2',NULL);--그룹에 기록이 포함되어 있지만,sal 필드가 모두 비어 있기 때문에sum(sal) 및 avg(sal) 함수에 무시되어 비어 있는 값을 되돌려줍니다
SELECT sum(sal), avg(sal) FROM e1; --    

--INSERT INTO e1 VALUES('RUSKY3',1000);

SELECT * FROM e1

NAME	SAL

RUSKY	

RUSKY2	

RUSKY3	1000.00

SELECT SUM(SAL),AVG(SAL),COUNT(SAL) FROM e1;

SUM(SAL)	AVG(SAL)	COUNT(SAL)

1000	1000	1

SELECT SUM(SAL),AVG(SAL),COUNT(SAL) FROM e1;

SUM(SAL)	AVG(SAL)	COUNT(SAL)

1000	 1000	 1

실제 응용에서 빈값(빈값 필드에 대응하는 기록줄)을 통계 계산에 포함시켜야 한다면 nvl 함수를 사용하여 빈값 필드(또는 표현식)를 지정한 값(보통 0)으로 변환한 다음에 계산할 수 있다. 예를 들어 SELECT SUM(NVL(SAL, 0)), AVG(NVL(SAL, 0) FROM e1;SUM(NVL(SAL,0)) AVG(NVL(SAL,0))1000 333.333333333333
그룹 함수의 반복 값인 COUNT(*)를 제외한 모든 그룹 함수는 자동으로 빈 값을 무시합니다.필요하면 COUNT(*)를 제외한 그룹 함수에서 DISTINCT 키워드를 사용하여 반복 값을 필터링할 수 있습니다. 그 문법 형식은 <그룹 함수 이름>(DISTINCT(<매개 변수 표현식>)입니다. 실제로 이러한 그룹 함수에는 DISTINCT에 해당하는 다른 키워드 ALL도 사용할 수 있습니다.즉, 반복 값을 필터링하지 않습니다(기본 옵션으로 명시적으로 설정하지 않음). 예를 들면 다음과 같습니다.
--DROUP TABLE e1

--CREATE TABLE E1(NAME VARCHAR2(20),SAL NUMBER(8,2));

/*INSERT INTO E1 VALUES('RUSKY1',2000);

INSERT INTO E1 VALUES('RUSKY2',2000);

INSERT INTO E1 VALUES('RUSKY3',1000);*/

SELECT * FROM E1

NAME	SAL

RUSKY1	2000.00

RUSKY2	2000.00

RUSKY3	1000.00

SELECT COUNT(SAL),SUM(SAL),AVG(SAL) FROM E1;

COUNT(SAL)	SUM(SAL)	AVG(SAL)

3	 5000	1666.66666666667

SELECT COUNT(ALL(SAL)),SUM(ALL(SAL)),AVG(ALL(SAL)) FROM E1;

COUNT(ALL(SAL))	SUM(ALL(SAL))	AVG(ALL(SAL))

3	 5000	 1666.66666666667

SELECT COUNT(DISTINCT(SAL)),SUM(DISTINCT(SAL)),AVG(DISTINCT(SAL)) FROM E1;

COUNT(DISTINCT(SAL))	SUM(DISTINCT(SAL))	AVG(DISTINCT(SAL))

2	 3000	 1500


좋은 웹페이지 즐겨찾기