본문 바로가기

Oracle/SQL Query

[SQLP] count(*), 그룹 함수 Query 결과

* 참고로 이건 그냥 내생각일 뿐, 참고하되 믿지는 말 것. 

또, 틀렸으면 댓글좀 달아요.


보고 또봐도 햇갈리는 문제


count(*), group 함수 결과값. 


자주 틀려서 정리한다. 

결과 는 group by를 하느냐 마느냐에 따라 count(*) output이 있고 없고 한다. 


1. 그냥 전체 집계 할 경우는 건수 없다고 0값을 출력함.

SQL> select count(*)

  2  from emp

  3  where 1=2

  4  ;


  COUNT(*)

----------

         0


2. 그룹함수 계산만 했을때는 데이터가 하나도 없더라도 데이터가 안나오는 것이 아니라 null 값이라도 출력한다.


SQL> select max(empno)

  2  from emp

  3  where 1=2

  4  ;


MAX(EMPNO)

----------



3. 그룹함수를 같이 써도 마찬가지로 0값을 출력함.

    그룹함수의 값은 계산할 값이 없으므로 Null이 출력됨(max의 경우)

SQL> select count(*) , max(empno)

  2  from emp

  3  where 1=2

  4  ;


  COUNT(*) MAX(EMPNO)

---------- ----------

         0


4. group by 를 하면? group 자체가 존재하지 않기 때문에 count(*)를 나타낼 레코드도 나오지 않는다. 

   그래서 레코드 없음. 

SQL> select count(*) , max(empno)

  2  from emp

  3  where 1=2

  4  group by empno;


선택된 레코드가 없습니다.



 헷갈린다. 봐도 봐도 우선 결과적으로 count(*)는 나오기만 하면 null 아닌 상수를 찍는 것이 맞고, group by를 하지 않는 이상 출력된 결과가 없더라도 count(*) 값은 나오는 것이 맞다. 그룹함수의 경우에도 무조건 나오고 값은 그때 해당하는 값으로 없으면 null을 출력한다. 


하지만 group by 를 한 경우에는 count(*)가 그루핑한 데이터의 의존적인 값으로 group는데 그룹핑되는 데이터가 하나도 없는 경우에는 group by 된 데이터 자체가 없어 row가 출력되지 않으므로 count(*), 그룹함수도 출력되지 않는다. 


*** group by 하면 count, 그룹함수도 row처럼, group by 없으면 무조건 출력임. 

     count(*) 함수는 절대 null이 찍힐 수 없음?