SQL Server 2005를 사용하고 있는데 HAVING
절의 이상한 동작을 발견했습니다. 정의에HAVING 절의 동작에 관한 신화
HAVING
절은 이 그룹화 된 후 데이터 에서 작동하도록을 예정이다. 그러나 HAVING
절 안에 COUNT
함수를 사용하면 실제로 그룹화되기 전에 데이터에 적용됩니다.
내가 여기에없는 이유는 무엇입니까 ??
샘플 데이터 : 해당
DECLARE @ProductTypeIDsTable TABLE
(
A INT
)
INSERT INTO @ProductTypeIDsTable(A) VALUES
(10),(12),(12),(9),(9),(9)
DECLARE @IDsTable TABLE
(
B INT
)
INSERT INTO @IDsTable(B) VALUES
(9),(10),(12)
쿼리 : 당신은 필드 목록 또는 HAVING 절에서 사용하는 경우 집계 함수를 사용
SELECT A
FROM @ProductTypeIDsTable pt
INNER JOIN @IDsTable ids ON pt.A = ids.B
GROUP BY A
--HAVING COUNT (A) = 1 -- gives 10 (repeated once due to the join)
--HAVING COUNT (A) = 2 -- gives 12 (repeated twice due to the join)
HAVING COUNT (A) = 3 -- gives 9 (repeated thrice due to the join)
나는 당신이 말하는 것을 얻지 못합니다. 값이 '9'인 행이 하나 있습니다. 여기에서 시도하십시오. http://data.stackexchange.com/stackoverflow/query/62661/group-by-having 또는 아마도 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 당신과 똑같은 생각을하지 못합니다. –
@Mikael I think * asker는 각 그룹 *이 단지 하나의 'A'를 가지고 있으므로 각 그룹의'COUNT (A) '는 항상 1이어야한다는 것을 의미합니다. 따라서'2'와'3' 행은 레코드를 반환하지 않아야합니다. – AakashM
'count'는 한 그룹의 어커런스를 집계하는 집계 함수입니다. 이 경우에 with는 값 '9'에 대해 '3'이고 필드 목록이나 having 절에서이 값을 사용하면 동일합니다. 'having '은 ** group by 뒤에 ** 행을 필터링하지만 having 절에서 count를하면 집계 된 행을 계산합니다. –