Study/DB

[SQL 첫걸음] 5장.집계와 서브쿼리 - 20.행 갯수 구하기(COUNT)

momo02 2018. 8. 31. 10:04
반응형

저자 : 아사이 아츠시

출판 : 한빛미디어 

발매 : 2015.11.01

 

 

* 집계함수
- SQL의 대표적인 집계함수 :

    COUNT(집합)

    SUM(집합)

    AVG(집합)

    MIN(집합)
    MAX(집합)

- 집계함수의 특징은 복수의 값(집합)에서 하나의 값을 계산해내는 것. 일반적인 함수는 하나의 행에 대해여 하나의 값을 반환. 집계함수는 집합으로부터 집합으로부터 하나의 값을 반환. 이렇게 집합으로 부터 하나의 값을 계산하는 것을 '집계'라 함. 

집계함수를 SELECT 구에 쓰면 WHERE구의 유무와 관계없이 결괏값으로 하나의 행을 반환.



1. COUNT로 행 개수 구하기 
- COUNT는 인수로 지정된 집합의 행 개수를 반환.  
- SELECT COUNT(*) FROM sample51; 
==> COUNT집계함수에선 *(모든열) = '테이블 전체' 라는 의미로 사용. 즉 테이블 전체의 행 개수를 반환.
- SELECT COUNT(*) FROM sample51 WHERE name = 'A';
==> WHERE구의 조건에 맞는 행의 개수 구하기.

(내부적으로 SELECT 구는 WHERE 구보다 나중에 처리. 따라서 WHERE구로 조건을 지정하면 테이블 전체가 아닌, 검색된 행이 COUNT로 넘겨짐) 



2. 집계함수와 NULL값

- COUNT의 인수로 열명을 지정할 수 있음. 열명을 지정하면 그 열에 한해서 행의 개수를 구할 수 있는데

  이때, 집계함수는 집합 안에 NULL 값이 있을 경우 이를 제외하고 처리 -->NULL값 무시


SELECT * FROM sample51;


SELECT COUNT(no), COUNT(name) FROM sample51;  

 

- 다만 COUNT(*)의 경우 모든 열의 행수를 카운트하기 때문에 NULL값이 있어도 해당 정보가 무시되지 않음. 

( * 모든 열이 NULL인 행이 있다고 해도, 이를 포함하여 카운트 됨..

ex) 위 테이블에서 no , name, quantity열이 모두 null인 행이 하나 있어도 COUNT(*)의 결과는 5. 

따라서 COUNT(*)는 NULL포함 테이블 내의 총 행 수를 반환한다고 보면 됨! 


 


3. DISTINCT로 중복 제거

- SELECT 구에서 DISTINCT를 지정하면 중복된 데이터를 제외한 결과를 클라이언트로 반환.

- 중복 여부는 SELECT 구에 지정된 모든 열을 비교해 판단.

- SELECT DISTINCT name FROM sample51;


- SELECT ALL name FROM sample51; ==> 중복 유무와 관계없이 모든 행을 반환.

- 즉, SELECT 구에 지정하는 ALL 또는 DISTINCT 가 중복값을 제거할 것인지를 설정함. 생략할 경우엔 ALL로 간주되어 중복된 값은 제거되지 않음.

 


 

4. 집계함수에서 DISTINCT

- 테이블의 name 열에서 NULL값은 제외하고, 중복하지 않는 데이터의 개수를 구하는 경우 

 SELECT DISTINCT COUNT(name) ==> X  (COUNT쪽이 먼저 계산됨)

 SELECT COUNT(DISTINCT name) ==> O  (집계함수의 인수로 DISTICNT를 이용한 수식을 지정, DISTINCT를 이용해 집합에서 중복을 제거한 뒤 COUNT로 NULL값을 제외한 행 개수를 구함) 

반응형