왜 GROUPBY와 HAVING 자구에 대소문자 표현식을 사용하지 않습니까?

질문:

아래의 예는 단지 테스트일 뿐이지만, 나는 사람들이 진정으로 의미 있는 것을 구성할 수 있다고 생각한다.어쨌든, 나는 왜 그것이 작용하지 않는지 모르겠다.MySQL 보고서 [42S22][1054] 알 수 없는 열 "document0"입니다."having 자구"중의 "age".나는 많은 다른 데이터베이스(PostgreSQL, DB2, Oracle, SQL Server 등)로 같은 조회를 테스트했는데 MySQL만 이에 대해 불만을 표시했다.
누가 왜 이러면 안 되는지 설명해 줄 수 있습니까?그룹by 자구에 age열을 넣고 사용할 수 있다는 것을 알지만, 이것은 생성된 코드입니다. 이 MySQL 문제를 처리하기 위해 특별한 사례를 추가해야 합니다. 이것이 바로 제가 이 문제를 더 잘 이해하고 싶은 이유입니다.이것은 문장이나 다른 표현식(예를 들어 플러그인 함수 호출)도 이런 오류를 초래할 수 있는 상황에서만 문제가 있는 것입니까?
select count(versions1_.id) as col_0_0_
from Document document0_
  left outer join document_version versions1_ on document0_.id=versions1_.document_id
group by
  document0_.id,
  case when document0_.id=document0_.age and document0_.age<4 then '2' when document0_.id=4 then '4' else '3' end
having
  case when document0_.id=document0_.age and document0_.age<4 then '2' when document0_.id=4 then '4' else '3' end='2'
편집: 함수 호출에도 문제가 있는지 확인했습니다. 그리고 문제가 있습니다.다음 작업도 실패하고 같은 오류 메시지를 표시합니다.
select count(versions1_.id) as col_0_0_
from Document document0_
  left outer join document_version versions1_ on document0_.id=versions1_.document_id
group by
  document0_.id,
  POW(document0_.id,document0_.age)
having
  POW(document0_.id,document0_.age)=2
나는 MySQL이 표현식이 똑같다는 것을 감지하지 못했다고 믿기 시작했기 때문에 HAVING 자구 부분을 실행할 때 그것들을 다시 계산해 보았다.내 말이 맞나?

답안

SUM 조항에 HAVING를 추가하면 다음과 같이 효력이 발생한다.
HAVING SUM(case when document0_.id=document0_.age and document0_.age<4
                     then '2' 
                when document0_.id=4 then '4' else '3' 
            end)='2' 
도움이 된다면 한번 해 보세요.나는 이미 유사한 상황을 검사했으니, 그것은 너의 상황에도 일해야 한다.
자세한 내용을 보려면 이 링크를 클릭하십시오Unknown column in 'having clause'.