문제

조항이있는 후에 where 절을 사용할 수 있습니까?

내 마음에 가장 먼저 오는 것은 하위 쿼리이지만 확실하지 않습니다.

추신 : 대답이 긍정적이라면 몇 가지 예를들 수 있습니까?

도움이 되었습니까?

해결책

아니요, 같은 쿼리가 아닙니다.

그만큼 where 절은 앞에갑니다 having 그리고 group by. 그룹화하기 전에 레코드를 필터링하려면 조건이 where 조항, 그룹화 된 레코드를 걸러 내고 싶다면 조건이 having 절:

select ...
from ...
where ...
group by ...
having ...

이상한 이유로 사용할 수 없다면 쿼리를 하위 쿼리로 만들어서 where 외부 쿼리의 조항 :

select ...
from (
   select ...
   from ...
   where ...
   group by ...
   having ...
) x
where ...

다른 팁

조항을 갖는 것은 단지 그룹에 따른 다음 절입니다. When

트릭 질문이라면, 당신이 언급 한 것과 같은 수준과 하위 퀘스트와 함께 어디에 어디에 있는지, 어디에 있는지, 어디에 있는지가 가능합니다.

나는 그런 것이 효과가 있다고 생각합니다

value = (foo에서 max (value) select where crit = 123)

추신 : 왜 물어 보았습니까? 특정 문제가 있습니까?

PSS : OK 바보, "인터뷰*"태그를 놓쳤습니다 ...

선택 도움말에서

다음 단계의 위치, 그룹 및 조항의 처리 순서는 WHERE 절, 절의 절에 의한 그룹 및 조항과 함께 선택 문의 처리 순서를 보여줍니다.

From Clause는 초기 결과 세트를 반환합니다.

WHERE 절은 검색 조건을 충족하지 않는 행을 제외합니다.

Clause By Clause 그룹은 선택한 행을 그룹 별 그룹의 각 고유 값에 대해 하나의 그룹으로 수집합니다.

선택 목록에 지정된 집계 함수 각 그룹의 요약 값을 계산합니다.

Hask Clause는 추가로 검색 조건을 충족하지 않는 행을 제외합니다.

그래서, 당신은 할 수 없습니다.

같은 범위 내에서 답은 아니오입니다. 하위 쿼리가 허용되면 사용을 피할 수 있습니다 HAVING 전적으로.

제 생각에는 HAVING 구식주의입니다. 휴 다웬이 말합니다 HAVING "구조화 된 쿼리의 어리 석음"으로 :

오래된 SQL에서 WHERE 조항은 집계 결과에 사용할 수 없으므로 발명해야했습니다. HAVING (같은 의미로 WHERE):

SELECT D#, AVG(Salary) AS Avg_Sal
  FROM Emp
 GROUP 
    BY D#
HAVING AVG(Salary) > 999;

그러나 우리는 가지고 있었을 것입니다 HAVING 1979 년에 글을 쓸 수 있다면

SELECT * 
  FROM (
        SELECT D#, AVG(Sal) AS Avg_Sal
          FROM Emp
         GROUP 
            BY D# 
       )
      AS dummy
WHERE Avg_Sal > 999;

다웬의 질문에 대한 답은 아니오라고 강력하게 의심합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top