쌓고 쌓다

[MySQL] Count(*), Count(1), Count(Column) 본문

프로그래밍/SQL

[MySQL] Count(*), Count(1), Count(Column)

승민아 2024. 2. 12. 14:30

 

MySQL로 좋아요 개수 쿼리를 공부하다가 Count의 인자로 뭘 넘겨주느냐의 차이를 정리하면 좋겠다싶어 정리한다.

 

먼저 장소(location)과 장소 좋아요(location_like)의 관계는 1:N이며 left join 했을때 결과는 다음과 같다.

왼쪽의 id가 장소의 PK인 id이고, 오른쪽의 id는 좋아요PK인 id이다.

장소 id 1에 좋아요 2개,

장소 id 2에 좋아요 1개,

장소 Id 3, 4에는 좋아요가 없는 상황이다.

 

이때 GROUP BY로 장소 id로 그룹을 묶고 count(*)를 해보자.



장소 3, 4에 좋아요가 없음에도 불구하고 1이 카운트된다.

 

COUNT(Column)인 Count(location_like.id)를 해보자. ( 좋아요PK를 count )

좋아요가 없는 장소는 0으로 카운트 된다.

 

Count(*)는 NULL도 카운트한다.

Count(Column)는 NULL은 카운트하지 않는다.

 

한번씩 코드에 Count(1)이 된걸 본적이 있는데 궁금해서 한번 쿼리를 실행해봤다.

Count(*)와 동일한 결과를 갖는다.

 

https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count

 

정리

  • Count(*) : NULL 포함
  • Count(1) : NULL 포함
  • Count(Column) : NULL 미포함
Comments