[SQL] 이유는 카운트 (*) "열"의 별칭을 사용하고 HAVING 절에서 참조 할 수 없습니다?
SQL이유는 카운트 (*) "열"의 별칭을 사용하고 HAVING 절에서 참조 할 수 없습니다?
나는 카운트 (*)에 별칭을 사용하고 HAVING 절에서 참조 할 수없는 이유를 궁금했다. 예를 들어 :
select Store_id as StoreId, count(*) as _count
from StoreProduct
group by Store_id
having _count > 0
작동하지 않을 것입니다 ..하지만 _count 및 사용 수 (*) 대신을 제거 할 경우 작동합니다.
해결법
-
==============================
1.최근 질문에 대한 답변에 CodeByMoonlight에 의해 참조 문서를 참조하십시오.
최근 질문에 대한 답변에 CodeByMoonlight에 의해 참조 문서를 참조하십시오.
HAVING 절은 SELECT 전에 평가 - 서버가 아직 별칭에 대해 알고하지 않도록.
-
==============================
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.이 작업을 할 수 있도록 당신은 select 절에서 카운트 별칭을 사용할 수 있습니다, 당신은 단지의 가진 문에 사용할 수 없습니다
이 작업을 할 수 있도록 당신은 select 절에서 카운트 별칭을 사용할 수 있습니다, 당신은 단지의 가진 문에 사용할 수 없습니다
select Store_id as StoreId, count(*) as _count from StoreProduct group by Store_id having count(*) > 0
-
==============================
4.필드 이름의 별칭은 결과의 열을 이름 지정, 그들은 쿼리 내에서 사용되지 않을 수있다. 당신도 같이 수행 할 수 없습니다
필드 이름의 별칭은 결과의 열을 이름 지정, 그들은 쿼리 내에서 사용되지 않을 수있다. 당신도 같이 수행 할 수 없습니다
select Store_id as Asdf from StoreProduct where Asdf = 42
그러나, 당신은 안전하게 두 곳에서 COUNT (*)를 사용할 수 있으며,이 두 번 계산되지 않도록 데이터베이스, 그것은 같은 값하다는 인식합니다.
-
==============================
5.당신은 SQL의 집계에 대한 별칭을 사용할 수 있지만, 그건 그냥 결과 헤더에 별칭을 보여주는 것입니다. 하지만 당신은 당신이 여전히 기능이 아닌 이름을 평가하기 때문에 총을 사용할 필요가 필요에 집계 함수와 조건을 갖고 싶어 할 때.
당신은 SQL의 집계에 대한 별칭을 사용할 수 있지만, 그건 그냥 결과 헤더에 별칭을 보여주는 것입니다. 하지만 당신은 당신이 여전히 기능이 아닌 이름을 평가하기 때문에 총을 사용할 필요가 필요에 집계 함수와 조건을 갖고 싶어 할 때.
-
==============================
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.여기 내 기여 (코드에 따라 여기에 게시)한다 :
여기 내 기여 (코드에 따라 여기에 게시)한다 :
select * from ( SELECT Store_id as StoreId, Count(*) as StoreCount FROM StoreProduct group by Store_id ) data where data.StoreCount > 0
-
==============================
8.그건 아마 때문에 방법 SQL은 네임 스페이스를 정의합니다. 예를 들어 보자 :
그건 아마 때문에 방법 SQL은 네임 스페이스를 정의합니다. 예를 들어 보자 :
select a as b, b as a from table where b = '5' order by a
A와 B는 무엇 다음을 참조합니까? 디자이너는 단지 별칭은 쿼리의 "외부"에 나타나도록하기로 결정했습니다.
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
'SQL' 카테고리의 다른 글
[SQL] C #을 사용 SQL 형식으로 날짜 시간 형식 (0) | 2020.04.23 |
---|---|
[SQL] 어떻게 사용합니까 ROW_NUMBER ()? (0) | 2020.04.23 |
[SQL] 구문에 대한 루프 SQL Server의 (0) | 2020.04.23 |
[SQL] SQL 서버 쿼리에서 0과 NULL 교체 (0) | 2020.04.23 |
[SQL] MySQL의에서 SET 자동 커밋 = 1 START의 TRANSACTION의 차이는 (유무 내가 뭔가를 놓친?) (0) | 2020.04.23 |