group by절 유무에 따른 max 함수 반환값 차이 0 2 2,103

by 푸른기린 [SQL Query] [2014.09.01 16:29:02]


안녕하세요.

테이블 조회시 조회된 row가 없으면 0을 표기하기 위해

아래와 같이 max 함수를 사용해서 처리하고자 하였습니다.

 
 SELECT IFNULL(MAX(mail_sn),0)
   FROM user_mail
  WHERE account_id = 13
    AND end_dt > NOW();

 

그런데

아래와 같이 group by 절을 추가하니 그대로 조회된 값이 보이지 않는데

왜 그런지 알 수 있을까요?

 

 SELECT IFNULL(MAX(mail_sn),0)
   FROM user_mail
  WHERE account_id = 13
    AND end_dt > NOW()
  GROUP BY account_id;

by 마농 [2014.09.01 16:46:58]

GROUP BY 가 생략되면 전체에 대해 집계합니다.
전체 평균, 전체합계, 전체갯수 등
전체라는 기준으로 집계되며, 기준이 명확하고
조건을 만족하는 자료가 있건,없건 무조건 1행을 반환합니다.


GROUP BY 가 사용되면 그룹별 집계합니다.
조건을 만족하는 자료가 있으면 해당 자료기준으로 집계를 하지만
조건을 만족하는 자료가 없으면 집계 기준자료 자체가 없는거죠
따라서 자료가 없으면 결과도 없습니다. (0행)


여기서 1행이 나오는 것과 0행인것도 구별해야 합니다.
빈값이 나왔다고 표현하셨지만?
빈값(null, 1행)이 나온게 아니죠.
아무것도 안나온 것입니다.(無, 0행)
아무것도 안나오는 경우엔 ifnull 를 수행할 대상 조차 없는 것입니다.


위 쿼리에서는 이미 id 조건을 주셨으므로 Group By id 는 의미 없어 보입니다.


by 푸른기린 [2014.09.01 17:16:21]

마농님 답변 감사합니다.

기준 자체의 차이였군요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입