본문 바로가기
데이터인문학

count(*)와 count(1)의 차이는 무엇일까, 그리고 Null은 계산되는가

by 데이터스토리 2024. 8. 14.
반응형

count(*)와 count(1)의 차이는 무엇일까? 어떤 차이가 있을지 알아보겠다. 더불어 count() 관련 함수 2가지를 추가로 설명하겠다.

 

count(*)와 count(1)의 차이는 무엇일까
count(*)와 count(1)의 차이는 무엇일까, 그리고 Null은 계산되는가

 

1. 테이블 데이터 조회

 

테이블의 데이터를 조회하기 위해 사용하는 SQL 문법이 있다.

 

SELECT * FROM {TABLE}

 

이다. 아주 많이 사용하는 문법이다. 어쩌면 이 문법을 가장 먼저 입력해 보고 있는 사람도 있다.

테이블에 담긴 데이터 못지않게 건수가 몇개나 되는지 확인하는 작업도 굉장히 중요하다. 특히 데이터를 이관 시킨 후 건수 비교를 할 때 많이 사용하고, Paging 작업에도 많이 사용된다.

하나씩 알아보자.

 

MySQL SELECT Statement
MySQL SELECT Statement

 

 

2. count 함수 알아보기

 

그러면 그 테이블의 데이터 건수를 조회하는 문법은 무엇일까? 이것도 아주 많이 사용한다.

SELECT count(*) FROM {TABLE}

이다.

 

여기서  count(*) 대신 count(1)도 많이 사용한다.

SELECT count(1) FROM {TABLE}

 

이렇게 말이다.

 

count(*) 과 count(1) 둘 간의 차이가 있을까?

 

결론은 "없다" 이다.

 

처리 결과도 같고 처리 속도도 차이가 없다.

그러면 왜 이렇게 사용할 까?

그것은 개인의 취향이다. 누구는 count(*)를 사용하고 누구는 count(1)을 사용한다.

 

여기서 무엇을 사용하면 좋을지를 묻는다면 "count(*)"을 사용하라고 말해주고 싶다.

이유는 

아주 많은 사람이 "count(*)"를 사용하기에 가독성이 좋기 때문이다.

 

 

 

 

 

 

 

[W3School] COUNT() Example

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

 

 

우리의 학습 유효기간은 짧다.(아래 기사 참조)

그래서 누구나 사용하는 일반적인 표기법을 사용해야 나중에라도 이해를 하게 된다. 

만약 count(1)을 사용한다면, "(1)"이 무엇을 의미하는 생각하는 단계를 거치게 된다. 그 보다는 항상 누구나 사용하는 "count(*)"가 바람직 한 것이다.

 

 

[동아 DBR] 갈수록 짧아지는 지식 유효기간...

 

[DBR] 갈수록 짧아지는 지식 유효기간 무형식 상시학습체제가 대안

  지식기반사회가 도래하면서 기업들은 창의성과 전문성을 갖춘 인력 개발에 막대한 인적·물적 자원을 투자하고 있으며 국가는 기업의 인력개발 활동을 지원하고 경쟁력을 갖춘 인재를 공급

dbr.donga.com

 

 

count(1) 보다는 count(*)를 사용하기를 적극 권장한다.

 

> count 이야기 하나더.

 

테이블에 저장된 데이터를 살펴보자.

숫자, 문자, 이미지, Boolean(True, False), 공백, N/A, Null 등이 있다.

여기서 완전 공백인 Null의 경우 count(*)에서는 포함이 된다.

하지만 해당 칼럼의 갯수를 세는 count({칼럼})의 경우에는 제외가 된다.

 

예를 들어

테이블 sales에 100개의 데이터가 있다. 칼럼은 3개가 있다. date, good, qty 이다.

칼럼 date는 100개 다 값이 있고, goods에는 null이 2개 있고 qty에는 null 값이 5개 들어있다.

 

이 경우 count 를 해 보자

 

  • SELECT count(*)         FROM sales;    -- 100건
  • SELECT count(date)    FROM sales;    -- 100건
  • SELECT count(good)   FROM sales;    -- 98건
  • SELECT count(qty)      FROM sales;    -- 95건  

 

와 같이 나온다. 

count에 직접적인 칼럼을 지정하면 그 칼럼이 가는 값 중에서  null은 제외되는 것이다.

 

- count(칼럼): Null 값을 제외한 건수를 출력
- count(*):       Null 값을 포함한 건수를 출력

 

 

 

 

 

 

 

> count 이야기 한번 만 더

SQL에는 distinct 라는 문법이 있다. 중복된 값은 제외하고 유일한 값만 출력하는 문법이다.

이 distinct를 count에 적용해 보자.

count(distinct 칼럼)

 

예를 들면,

sales 테이블의 100건의 데이터가 있고, goods 칼럼에는 "apple, banana, orange"만 있다. 이럴때 goods에서 다루는 상품의 갯수를 알고자 한다. 

 

SELECT count(distinct goods) FROM sales; 

 

위와 같이 SQL을 만들면 된다.

실행시키면 3건만이 나온다. 즉 중복처리 후 유일한 값의 개수를 출력하는 것이다.

 

 

MySQL Counting Rows
MySQL Counting Rows

 

 

3. count(*), count(1) 정리하며

 

이렇게 count(*)와 count(1) 을 비교했다. 차이는 없다. 하지만 count(*)를 사용하기를 권장한다.

데이터에 null이 있을 경우 count(칼럼)은 Null 이 있는 경우 개수에서 제외하지만, count(*)는 포함하여 개수를 산정한다.

count(distinct goods)는 goods 칼럼에 담겨있는 유일한 값의 수를 출력한다.

 

count() 함수를 알아봤다.

SQL에서 많이 사용하는 함수이니 기억하기 바란다.

너무쉬워서 자주 사용하지 않으면 잊기 쉬운점도 기억하기 바라며 마무리 합니다.

 

공공데이터 국가데이터맵
공공데이터 국가데이터맵

반응형