MySQL - 집계함수 (COUNT)

Posted by Juri on October 19, 2021

COUNT로 행 개수 구하기

SQL은 집합을 다루는 집계함수를 제공한다. 집계함수는 인수로 집합을 지정하기 때문에 집합함수라고 부르기도 한다. COUNT함수는 인수로 주어진 집합의 개수를 구해 반환한다.

no name
1 A
2 A
3 B
4 C
5 NULL
1
SELECT COUNT(*) FROM test_table;
COUNT(*)
5

test_table에 전부 다섯 개의 행이 있어 COUNT의 결과값이 5가 된다. 이 때 값이 NULL인 행을 포함해 갯수를 세는 사실을 주의해야한다.

📎WHERE 조건 지정하기

no name
1 A
2 A
3 B
4 C
5 NULL
1
SELECT COUNT(*) FROM test_table WHERE name='A';
COUNT(*)
2

SELECTWHERE보다 나중에 처리된다. 따라서 WHERE 조건을 만족하는 검색된 행이 COUNT로 넘겨진다. 결과적으로 COUNT는 WHERE 조건에 맞는 행의 개수를 반환한다.

지정한 열의 개수 구하기

1
SELECT COUNT(no), COUNT(name) FROM test_table;
COUNT(no) COUNT(name)
5 4

집계함수는 집합 안에 NULL값을 제외하고 처리한다.

DISTINCT

DISTINCT로 중복 제거

name
A
A
B
C
NULL

위의 테이블에서 A의 값이 중복된다.

1
SELECT DISTINCT name FROM test_table;
name
A
B
C
NULL

DISTINCT는 SELECT에서 지정한 모든 열을 비교해 중복된 데이터를 제외한 결과를 반환한다.

집계함수에서 DISTINCT 사용하기

name 열에서 NULL값을 제외하고 중복하지 않는 데이터의 개수를 구하는 경우를 생각해보자. COUNT, DISTINCT, WHERE을 사용해 구할 수 있을까? 정답은 ‘할 수 없다.’이다.

1
SELECT DISTINCT COUNT(name) FROM test_table;

위의 코드는 COUNT가 먼저 처리되기 때문에 DISTINCT가 적용되지 않는다.

1
SELECT COUNT(DISTINCT name) FROM test_table;

위의 코드와 같이 DISTINCT를 인수에 지정해야 비로소 원하는 값을 얻을 수 있다. DISTINCT를 이용해 집합에서 중복을 제거한 뒤 COUNT로 개수를 구할 수 있는 것이다.