─━ IT ━─

[Oracle] COUNT 함수 사용법 및 예시

DKel 2021. 2. 12. 08:13
반응형

COUNT 함수 예시

문법

COUNT (*)
COUNT (DISTINCT | ALL ] expr )
return [NUMBER]

 

파라미터

expr 어떤 식 열 이름

 

리턴

그룹의 레코드 건수 행수를 돌려 보낸다.

 

조건

SQL에서만 사용 가능. (PL/SQL 등)

 

내용

COUNT 함수에 별표 (*)를 사용하면 그룹의 모든 레코드 수를 돌린다.
식 또는 열 이름을 지정하면 해당식이 NULL 값 것들을 카운트에 포함하지 않는다.
또한 DISTINCT를 지정하면 중복 된 값의 행을 계산에 포함하지 않는다.

많은 경우 GROUP BY 절 을 사용하지 않고 전체 행수를 취득하는 경우가 많은데, 그룹 단위의 행수를 구하는 것도 가능하다.

COUNT의 특징적인 사용 방법은 그룹화 된 그룹 수를 결정하는데 COUNT (COUNT (*))과 중첩하여 사용할 수도 있다.

 

주의

COUNT 함수 식을 지정했을 경우, 식의 값이 NULL 값 의 경우 "정의되지 않음"을 나타낸다. 

"정의되지 않음"은 존재하지 않는 것으로 다루어진다.

그러나 COUNT 함수는 NULL을 건수에 포함하는 데 특별한 별표 (*)를 사용하는 구문이 준비되어 있으며

NULL을 포함하여 행수를 취득 할 수 있다.


데이터가 한 건도없는 경우는 레코드가 선택되지 않았습니다 대신 0을 되돌린다.
그러나 group by 병용 및 분석 함수 COUNT의 경우 결과는 0이 아닌 레코드가 선택되지 않았습니다 이다.

 

예시
name dept salary
A 관리부 300,000
B 관리부 400,000
C 개발부 500,000
D 개발부 500,000
E 개발부 200,000
F 개발부 NULL

 

COUNT (*)와 COUNT ( expr )와 COUNT ( DISTINCT expr )의 차이.

SQL> select  COUNT (*), COUNT (salary), COUNT ( distinct  salary)
  2 from count_sample;
 
  COUNT (*) COUNT (SALARY) COUNT (DISTINCTSALARY)
 ---------- ------------- --------------- ------ 
         6              5               4
name dept salary COUNT (*) COUNT (salary) COUNT(distinct salary)
A 관리부 300,000 1 1 1
B 관리부 400,000 2 2 2
C 개발부 500,000 3 3 3
D 개발부 500,000 4 4
E 개발부 200,000 5 5 4
F 개발부 NULL 6 - -
결과 - - 6 5 4

 

부문(dept) 별로 구하게 된다면 건수는

SQL> select  dept, COUNT (*), COUNT (salary) from count_sample group by  dept;
 
DEPT            COUNT (*) COUNT (SALARY)
 ------------ ---------- -------------
관리부                 2            2
개발부                 4            3

 

식을 사용하여 NULL로 변환한 경우 : 급여가 500,000 의 것은 건수에 포함시키지 않는다.
(NULLIF 함수는 이러한 사용하지 않고, WHERE 조건으로 기술하는 방법이 맞다.)

SQL> select  dept, COUNT ( nullif (salary 500000)), COUNT (null)
  2 from count_sample group by  dept;
 
DEPT          COUNT ( NULLIF (SALARY 500000)) COUNT (NULL)
 ------------ ------------------------ ---- -----------
관리부                             2                0
개발부                             1                0

 

부문별로 급여가 200,000 이하의 수를 카운트하는 예시

select  dept, COUNT (salary), count (*) from count_sample
where salary <= 200000 group by  dept;
 
DEPT	  COUNT (SALARY)  COUNT (*)
 -------- ------------- ---------- 
개발부                           1

 

 

부문별로 급여가 200,000 엔 이하의 수를 카운트하는 (그 2)
데이터로 존재하지 않지만 제조 부 라는 부서가 존재하는 경우에는 부서 목록 등의 외부 결합이 필요

select  dept, COUNT (salary), count (salary2), count (*) from (
   select  dept,
     case  when salary> 200000 then null else salary end salary,
     case  when lnnvl (salary <= 200000) then null else salary end salary2
  from count_sample
)
group by  dept;
 
DEPT	  COUNT (SALARY) COUNT (SALARY2)	 COUNT (*)
 -------- ------------- -------------- - --------
관리부      0                0              2
개발부      1                4               

 

조건별로 계산하는 예제

select  dept, trunc (salary / 1000), COUNT (salary)
from count_sample group by  dept, trunc (salary / 1000)
 order by  dept, trunc (salary / 1000);
 
DEPT	  TRUNC (SALARY / 1000) COUNT (SALARY)
 -------- ------------------ -------------
관리부 300 1
관리부 400 1
개발부 200 1
개발부 500 2
개발부 0

 

조건별로 계산 2 (COUNTIF 바람)

select  dept, 
   COUNT ( case  when salary> = 500000 then 'X'  else null end) "> = 500K" ,
   COUNT ( case  when salary> = 400000 and salary <500000 then 'X'  else null end) "400K" ,
   COUNT ( case  when salary> = 300000 and salary <400000 then 'X'  else null end) "300K" ,
   COUNT ( case  when salary> = 200000 and salary <300000 then 'X'  else null end) "200K" ,
  COUNT ( case when salary> = 100000 and salary <200000 then 'X'  else null end) "100K" ,
   COUNT ( case  when salary <100000 then 'X'  else null end) "<100K" ,
   COUNT ( case  when salary is null then ' X '  else null end) "NULL" 
from count_sample group by  dept;
 
DEPT> = 500K 400K 300K 200K 100K <100K NULL
------ ------ ------ ------ ------ ------ ------ ------
관리부 0 1 1 0 0 0 0
개발부 2 0 0 1 0 0 1

 

카운트 함수의 계산 = COUNT (COUNT (*))
부문별로 구분하면 여러 그룹화되어 있는지 ... (관리부와 개발부의 2 그룹)

SQL> select  COUNT ( COUNT (*)) from count_sample group by  dept;
 
COUNT ( COUNT (*))
 --------------- 
              2

 

 

 

반응형