* 참고로 이건 그냥 내생각일 뿐, 참고하되 믿지는 말 것.
또, 틀렸으면 댓글좀 달아요.
보고 또봐도 햇갈리는 문제
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이 찍힐 수 없음?