GROUP BY 절 없이 HAVING 절을 사용할 수 있나요?
SQL 표준에는 HAVING 절 사용에 대한 특정 기준이 설명되어 있습니다. GROUP BY 절이나 외부 참조에 기능적으로 종속된 열을 참조합니다. 그러나 제공된 쿼리는 GROUP BY 없이 HAVING을 사용할 수 있는지에 대한 의문을 제기합니다.
표준 SQL 사양
표준에 따르면 HAVING 절은 GROUP BY 없이 사용할 수 있습니다. GROUP BY 절은 명시적으로 금지되지 않습니다. 그러나 쿼리는 의심스러운 동작을 나타냅니다.
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
이 쿼리는 HAVING 절에 집계 함수(MAX)를 사용하지만 어떤 특정 행을 선택해야 하는지는 나타내지 않습니다. 따라서 해당 동작은 표준에 의해 엄격하게 정의되지 않습니다.
MySQL 구현
MySQL은 이 쿼리를 암시적인 GROUP BY 절이 있는 것처럼 해석하여 행만 선택합니다. 최대 NumberOfPages 값을 사용합니다. 이 동작은 표준을 준수하지 않습니다.
표준 비준수 이유
표준에서는 HAVING 절이 GROUP BY 절로 정의된 행 그룹에서 작동하도록 요구합니다. 그 목적은 집계 값을 기준으로 그룹을 필터링하는 것입니다. GROUP BY 없이 HAVING을 사용하면 임의의 조건에 대한 필터링이 허용되어 예기치 않은 결과가 발생할 가능성이 있습니다.
유효한 표준 SQL 쿼리
GROUP BY 없이 HAVING을 사용하는 유효한 표준 SQL 쿼리
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
이 쿼리는 최소 NumberOfPages 값이 더 작은지 확인합니다. true인 경우 'T' 결과가 포함된 단일 행을 반환하고 false인 경우 빈 집합을 반환합니다. 이 동작은 HAVING이 전체 테이블에서 작동하는 집계 함수에 적용된다는 표준 요구 사항과 일치합니다.
위 내용은 SQL에서 GROUP BY 절 없이 HAVING을 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!