복붙노트

[SQL] GROUP BY없이 HAVING

SQL

GROUP BY없이 HAVING

고르다 * 책 NumberOfPages를 갖는 = MAX (NumberOfPages)

다음은 표준 기록한다 :

출처

누군가가 나를 설명 할 수, 왜 표준에 따라 가능해야한다?

MySQL은, 그것은 완벽하게 작동합니다.

해결법

  1. ==============================

    1.Mimer 검사기 결과에도 불구하고, 나는 당신이 유효한 표준 SQL이라고 생각하지 않습니다.

    Mimer 검사기 결과에도 불구하고, 나는 당신이 유효한 표준 SQL이라고 생각하지 않습니다.

    GROUP BY 절없는 HAVING 절은 유효하고 표준 SQL에서 (틀림없이) 유용한 구문입니다. 는 테이블 식에 작동하기 때문에 한꺼번에 세트로, 말하자면, 그것은 단지 정말 집계 함수를 사용하는 의미가 있습니다. 당신의 예에서 :

    Book HAVING NumberOfPages = MAX(NumberOfPages)
    

    유효하지 않기 때문에 NumberOfPages가 참조 않는 행 전체 테이블을 고려할 때? 마찬가지로, 그것은 단지 SELECT 절에서 리터럴 값을 사용하는 의미가 있습니다.

    유효한 표준 SQL이다이 예를 생각해 보자 :

     SELECT 'T' AS result
       FROM Book
     HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
    

    DISTINCT 키워드의 부재에도 불구하고, 쿼리는 더 한 행보다 반환하지 않습니다. HAVING 절은, 결과는 값 'T'를 포함하는 단일 열이있는 단일 행이 될 것입니다 만족하는 경우 빈 세트는 단일과 제로 행 즉, 그렇지 않으면 결과가 될 것입니다, (우리는 페이지의 번호를 다른 책을 나타냄) 기둥.

    내가 쿼리는 MySQL의 오류 때문에 (논리적으로) SELECT 절 이후에 존재하게에 HAVING 절을 일으킬 propritary 확장을하지 않는 이유를 생각 암시 그룹 BY와 결합, (표준 행동은 주위에 다른 방법입니다) 절은 다른 답변에서 언급했다.

  2. ==============================

    2.표준에서 (굵게 강조에서 추가)

    표준에서 (굵게 강조에서 추가)

    1) HC는 HAVING 절하자. TE 즉시 HC가 들어있는 테이블 식하자. TE는 즉시 조항에 의해 그룹을 포함하지 않는 경우, "GROUP BY ()는"암시 적이다. T가를하자 GBC에 의해 정의 된 테이블의 설명은 TE에 포함 된 R은하자 즉시 GBC의 결과.

    절 의해 암시 그룹, 외부 참조가 TE 열에 접근 할 수있다.

    그러나, 이러한 표준에 대한 인증은 자체 인증은 매우 요즘, 그리고 예를 들어 당신이 주요 RDBMS 공급 업체의 모든 걸쳐 것없는 일을했다.

  3. ==============================

    3."GROUP BY를 사용하지 않는 경우, HAVING 동작합니다은 WHERE 절을 좋아한다." 여기서 갖는 차이 : 필터 ROWS 필터 그룹을 갖는 반면

    "GROUP BY를 사용하지 않는 경우, HAVING 동작합니다은 WHERE 절을 좋아한다." 여기서 갖는 차이 : 필터 ROWS 필터 그룹을 갖는 반면

    SELECT SUM(spending) as totSpending
    FROM militaryspending
    HAVING SUM(spending) > 200000;
    

    결과

    totSpending
    1699154.3
    

    더 많은 세부 사항, 문의하시기 바랍니다 https://dba.stackexchange.com/questions/57445/use-of-having-without-group-by-in-sql-queries/57453

  4. ==============================

    4.예를 우리는별로 그룹화하지 않고 SQL 쿼리를 작성하지만, 집계 함수를 작성할 수 있습니다 우리 쿼리한다.

    예를 우리는별로 그룹화하지 않고 SQL 쿼리를 작성하지만, 집계 함수를 작성할 수 있습니다 우리 쿼리한다.

    select sum(Salary) from ibs having max(Salary)>1000
    
  5. from https://stackoverflow.com/questions/6924896/having-without-group-by by cc-by-sa and MIT license