COUNT로 행 개수 구하기
SQL은 집합을 다루는 집계함수를 제공한다. 집계함수는 인수로 집합을 지정하기 때문에 집합함수라고 부르기도 한다. COUNT
함수는 인수로 주어진 집합의 개수를 구해 반환한다.
no |
name |
1 |
A |
2 |
A |
3 |
B |
4 |
C |
5 |
NULL |
1
| SELECT COUNT(*) FROM test_table;
|
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';
|
SELECT
는 WHERE
보다 나중에 처리된다. 따라서 WHERE 조건을 만족하는 검색된 행이 COUNT로 넘겨진다. 결과적으로 COUNT는 WHERE 조건에 맞는 행의 개수를 반환한다.
지정한 열의 개수 구하기
1
| SELECT COUNT(no), COUNT(name) FROM test_table;
|
COUNT(no) |
COUNT(name) |
5 |
4 |
집계함수는 집합 안에 NULL값을 제외하고 처리한다.
DISTINCT
DISTINCT로 중복 제거
위의 테이블에서 A의 값이 중복된다.
1
| SELECT DISTINCT name FROM test_table;
|
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로 개수를 구할 수 있는 것이다.