복붙노트

[SQL] 이유는 카운트 (*) "열"의 별칭을 사용하고 HAVING 절에서 참조 할 수 없습니다?

SQL

이유는 카운트 (*) "열"의 별칭을 사용하고 HAVING 절에서 참조 할 수 없습니다?

나는 카운트 (*)에 별칭을 사용하고 HAVING 절에서 참조 할 수없는 이유를 궁금했다. 예를 들어 :

select Store_id as StoreId, count(*) as _count
    from StoreProduct
    group by Store_id
        having _count > 0

작동하지 않을 것입니다 ..하지만 _count 및 사용 수 (*) 대신을 제거 할 경우 작동합니다.

해결법

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

    1.최근 질문에 대한 답변에 CodeByMoonlight에 의해 참조 문서를 참조하십시오.

    최근 질문에 대한 답변에 CodeByMoonlight에 의해 참조 문서를 참조하십시오.

    HAVING 절은 SELECT 전에 평가 - 서버가 아직 별칭에 대해 알고하지 않도록.

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

    2.선택 조항에 의해 순서를 제외하고, 논리적으로 실행해야 할 마지막 절입니다. 별칭은 아직 사용할 수없는, 그래서 HAVING 절 이전, 선택 발생합니다.

    선택 조항에 의해 순서를 제외하고, 논리적으로 실행해야 할 마지막 절입니다. 별칭은 아직 사용할 수없는, 그래서 HAVING 절 이전, 선택 발생합니다.

    당신이 정말로 별칭을 사용하려면, 내가이 일을 권 해드립니다하지 않는 것이, 인라인 뷰는 별명을 사용할 수 있도록하는 데 사용할 수 있습니다 :

    select StoreId, _count
    from (select Store_id as StoreId, count(*) as _count
        from StoreProduct
        group by Store_id) T
    where _count > 0
    

    또는 SQL Server 2005 및 이상하는 CTE에서 :

    ; with T as (select Store_id as StoreId, count(*) as _count
        from StoreProduct
        group by Store_id)
    select StoreId, _count
    from T
    where _count > 0
    
  3. ==============================

    3.이 작업을 할 수 있도록 당신은 select 절에서 카운트 별칭을 사용할 수 있습니다, 당신은 단지의 가진 문에 사용할 수 없습니다

    이 작업을 할 수 있도록 당신은 select 절에서 카운트 별칭을 사용할 수 있습니다, 당신은 단지의 가진 문에 사용할 수 없습니다

    select Store_id as StoreId, count(*) as _count
        from StoreProduct
        group by Store_id
            having count(*) > 0
    
  4. ==============================

    4.필드 이름의 별칭은 결과의 열을 이름 지정, 그들은 쿼리 내에서 사용되지 않을 수있다. 당신도 같이 수행 할 수 없습니다

    필드 이름의 별칭은 결과의 열을 이름 지정, 그들은 쿼리 내에서 사용되지 않을 수있다. 당신도 같이 수행 할 수 없습니다

    select Store_id as Asdf
    from StoreProduct
    where Asdf = 42
    

    그러나, 당신은 안전하게 두 곳에서 COUNT (*)를 사용할 수 있으며,이 두 번 계산되지 않도록 데이터베이스, 그것은 같은 값하다는 인식합니다.

  5. ==============================

    5.당신은 SQL의 집계에 대한 별칭을 사용할 수 있지만, 그건 그냥 결과 헤더에 별칭을 보여주는 것입니다. 하지만 당신은 당신이 여전히 기능이 아닌 이름을 평가하기 때문에 총을 사용할 필요가 필요에 집계 함수와 조건을 갖고 싶어 할 때.

    당신은 SQL의 집계에 대한 별칭을 사용할 수 있지만, 그건 그냥 결과 헤더에 별칭을 보여주는 것입니다. 하지만 당신은 당신이 여전히 기능이 아닌 이름을 평가하기 때문에 총을 사용할 필요가 필요에 집계 함수와 조건을 갖고 싶어 할 때.

  6. ==============================

    6.hive.groupby.orderby.position.alias가 true로 설정되어있는 경우 하이브 0.11.0 이상에서는 열이 위치를 지정할 수 있습니다.

    hive.groupby.orderby.position.alias가 true로 설정되어있는 경우 하이브 0.11.0 이상에서는 열이 위치를 지정할 수 있습니다.

    set hive.groupby.orderby.position.alias=true;
    select Store_id as StoreId, count(*) as _count
    from StoreProduct
    group by 1
    

    나는 당신의 쿼리의 목적을 이해하지 못하고 있어요. 하지 않는 항목이 존재하기 때문에 당신이 게시 된 쿼리의 상황을 감안할 때, 당신의 상태는, 내가 필요하지 않습니다. 이자형. 쿼리에서 결과 수 없으며, 0 계산 ...

  7. ==============================

    7.여기 내 기여 (코드에 따라 여기에 게시)한다 :

    여기 내 기여 (코드에 따라 여기에 게시)한다 :

    select * from (
      SELECT Store_id as StoreId, Count(*) as StoreCount 
      FROM StoreProduct
      group by Store_id
      ) data
    where data.StoreCount > 0
    
  8. ==============================

    8.그건 아마 때문에 방법 SQL은 네임 스페이스를 정의합니다. 예를 들어 보자 :

    그건 아마 때문에 방법 SQL은 네임 스페이스를 정의합니다. 예를 들어 보자 :

      select a as b, b as a
        from table
       where b = '5'
    order by a
    

    A와 B는 무엇 다음을 참조합니까? 디자이너는 단지 별칭은 쿼리의 "외부"에 나타나도록하기로 결정했습니다.

  9. from https://stackoverflow.com/questions/2068682/why-cant-i-use-alias-in-a-count-column-and-reference-it-in-a-having-clause by cc-by-sa and MIT license