조항이있는 후에 Where 조항을 가질 수 있습니까?
문제
조항이있는 후에 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;
다웬의 질문에 대한 답은 아니오라고 강력하게 의심합니다.