본문 바로가기

Data/Oracle SQL

집계함수 중 COUNT(*)은 대체 뭘까?

쿼리를 보다가 COUNT(*)이라는 표현을 접했다. 이 짧은 함수가 이해가 잘 되지 않아서 정리해봤다.

 

 

1. COUNT()

 

SQL 문법 중 COUNT()는 집계함수로 분류된다.

집계함수를 쉽게 인식하자면 다음과 같다.

 

  1. 여러 행의 데이터를 하나의 그룹으로 묶는다.
  2. 묶은 그룹을 기준으로 하나의 결과값을 도출한다.

 

집계함수는 여러 데이터에서 단 하나의 결과값을 얻고자 할 때 사용한다.

 

COUNT()는 이런 측면에서 보면 정말로 단순하다.

COUNT('A')라고 표현하면, 'A'라는 값을 가진 행의 개수를 출력한다.

COUNT(1)이라고 표현하면, 1이라는 값을 가진 행의 개수를 출력한다.

 

그렇다면 COUNT(*)는 대체 뭘까?

간단히 생각하면 그 어떤 값이라도 있는 행의 개수를 출력한다는 것이다.

여기서 의문이 생긴다.

그렇다면, NULL은 값이 있다는 것일까?

 

답부터 말하자면, COUNT(*)은 NULL 또한 값으로 인식한다.

즉, COUNT(*)은 모든 행의 개수를 출력한다.

집계함수에서 이런 성질을 오묘하게 이용할 수 있다.

 

 

2. 집계함수에서 COUNT(*) 활용

 

집계함수는 여러 데이터를 특정한 기준으로 묶어서 그룹으로 인식한다.

즉, 여러 개의 그룹이 존재할 수 있다는 뜻이다.

 

100개의 데이터를 특정한 기준에 따라서 3개의 그룹 A, B, C를 얻었다고 가정하자.

그룹 A는 30개, 그룹 B는 60개, 그룹 C는 10개의 데이터를 보유한다.

이 상태에서 COUNT(*)을 출력하면 어떤 일이 벌어질까?

 

100개의 데이터가 있는 상황에서 SELECT COUNT(*)을 하면 당연히 100이 나온다.

하지만 그룹별로 나뉜 상황이다.

그렇다면 이 상황에서 SELECT COUNT(*)은 그룹별로 30, 60, 10 값을 출력한다.

 

개인적으로 이 부분이 정말로 이해가 잘 안 됐다.

집계함수 개념에 대한 이해가 부족했기 때문이다.

 

  1. 데이터를 그룹으로 묶는다.
  2. 계산은 그룹 단위로 한다. <----- 이것을 인식못하면 아무리 봐도 저 간단한 COUNT(*)을 이해할 수 없다.

 

 

3. 정리

 

간단한 예시지만 그룹함수에 대한 개념에 대해서 흥미를 가지는 계기가 되었다.

데이터를 다루는 것이 SQL이라면, 여러 데이터에서 보편적인 값을 출력하는 것이 데이터를 다루는 핵심이라고 본다.

 

다중검색을 위한 쿼리는 결국 다양한 데이터에서 하나의 결과값을 출력하기 위함이고,

튜닝은 결국 출력에 들어가는 비용을 줄이기 위한 장치다.

 

그것을 인식하는 좋은 계기가 되었다고 생각한다.

COUNT(*)!