상용 그룹 함수count-avg-sum-max-min
4760 단어 count
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[react] 간단한 카운터앱 만들기스파르타 코딩클럽 앱개발플러스 1주차 수강을 마무리하는 날, 매주마다 숙제로 마무리를 하는데, 난 거의 숙제해설을 보고 하는 편... ㅎㅎ;; 뭐 ㅋ도 모르면서 코딩을 하다보니... 그래도 종합반을 듣고 와서 그런지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.