데이터베이스 전문가 포럼에서 어떤 분이 질문 주신 문제를 풀다가, 의문점이 생겨 질문을 하게 되었습니다.
(ㄷ)을 보시면, group by 절을 쓰지 않고, having 절만 사용했음에도 불구하고, 가능하다라고 나와있더라구요. 그러면, group by 절을 통해 묶어야 하는 컬럼을 명시하지 않고, having절을 사용하였을 시에는 어떤 컬럼을 기준으로 group by를 수행하는지 궁금합니다.
[https://cafe.naver.com/sqlpd에서 사진은 퍼왔습니다!]
위 쿼리는 3단계 서브쿼리 형태네요.(메인, 서브1(상관), 서브2(비상관))
서브1은 상관서브쿼리로 메인의 회원ID 별로 동작합니다.
서브1은 회원ID별로(상관) 수행되어 이벤트일자 조건을 만족하는 발송메일 건수를 구하네요.
서브2는 독립적으로(비상관) 수행되어 이벤트일자 조건을 만족하는 이벤트 건수를 구하구요.
서브2에서 구한 건수를 서브1에서 조건으로 사용하네요.
서브1의 결과 존재여부를 메인에서 체크합니다.
(회원별 2014.10.01 이후 이벤트 메일 발송 건수)가 (2014.10.01 이후 전체이벤트 건수)보다 작은 경우
즉, 2014.10.01 이후 이벤트에 대한 메일발송이 누락된 회원 구하기