답변:
아니.
Oracle에서 다음 쿼리가 작동한다는 사실에 의해 입증 된 것처럼 공존 할 필요는 없습니다.
select * from dual having 1 = 1;
마찬가지로 PostgreSQL에서 다음 쿼리가 작동합니다.
select 1 having 1 = 1;
따라서 필요 having
하지 않습니다 . group by
집계 단계 후 적용 이 적용 되며 집계 결과를 필터링하려는 경우 사용해야합니다. 따라서 그 반대는 사실이 아니며 다음과 같이 작동하지 않습니다.
select a, count(*) as c
from mytable
group by a
where c > 1;
당신은 교체해야 where
와 함께 having
다음과 같이,이 경우 :
select a, count(*) as c
from mytable
group by a
having c > 1;
NB 다음 쿼리 양식도 작동합니다.
select *
from (
select a, count(*) as c
from mytable
group by a
)
where c > 1;
사용 having
은이 마지막 쿼리의 간단한 버전 임을 알 수 있습니다 .
요약하면, having
적용 후group by
위상 반면 where
인가 전에group by
단계.
select 1 having count(*) = 1;
은 아직 파악하지 못한 다음 구성 을 허용합니다 .
SELECT 1 AS id, 'Colin' AS name;
하지만 Oracle과 같은 다른 사람들에게는 특별한 dual
테이블이 있습니다. 이 구문 중 하나가 ANSI / ISO SQL (필수)이라고 생각하지 않습니다 FROM
.
from
하지만에 대한 참조 count(*)
에서 having
이 집계되고있는 열 이상에 같은 표시없이 절을. 아마도 select
절의 모든 열에 대해 집계 됩니다.
그룹을 필터링하는 데 사용됩니다.
where 절은 행을 필터링하는 데 사용됩니다.
having
은 집계 단계 후에 적용 되므로 그룹 을 필터링 하는 데 사용할 수 있습니다 .
SELECT MIN(a) AS mina, MAX(a) As maxa FROM mytable HAVING MIN(a) < MAX(a);