[SQL] 이유는 HAVING 절에 집계 별칭을 사용할 수 없습니다?
SQL이유는 HAVING 절에 집계 별칭을 사용할 수 없습니다?
아래 그림처럼 내 코드는 다음과 같습니다
select col1,count(col2) as col7
from --some join operation
group by col1
having col7 >= 3 -- replace col7 by count(col2) to make the code work
내 코드는 오류 "잘못된 열 이름 'col7'을 '이 발생합니다. 왜 이런 일이 발생합니까? SQL이 날 마지막 줄에 col7을 사용하는 것을 허용하지 않습니다 비논리적 보인다.
나는 2008을 표현하는 SQL 서버를 사용하고 있습니다
해결법
-
==============================
1.MS SQL, 유일한 장소에서 당신은 ORDER BY 절에서 별칭입니다 참조 할 수 있음 (나는 알고 있어요). 쿼리의 다른 부분에서 참조 별명 할 수있는 능력은 많은 다른 DB 플랫폼이 가지고있는 기능이며 정직 마이크로 소프트가 추가 할 수있는 유용한 충분한 기능을 고려하지 않았 음을 날 귀찮게.
MS SQL, 유일한 장소에서 당신은 ORDER BY 절에서 별칭입니다 참조 할 수 있음 (나는 알고 있어요). 쿼리의 다른 부분에서 참조 별명 할 수있는 능력은 많은 다른 DB 플랫폼이 가지고있는 기능이며 정직 마이크로 소프트가 추가 할 수있는 유용한 충분한 기능을 고려하지 않았 음을 날 귀찮게.
-
==============================
2.HAVING 절은 SELECT 전에 평가 - 서버가 아직 별칭에 대해 알고하지 않도록.
HAVING 절은 SELECT 전에 평가 - 서버가 아직 별칭에 대해 알고하지 않도록.
이 질문에 대한 답변이 되었기를 바랍니다. 별명은 ORDER BY 절에서 작동하는 이유 또한, 설명합니다.
-
==============================
3.선택 목록은 또한 HAVING 절에서 사용할 수있는 동일한 표현이 들어 있으므로이 하나를 시도하십시오 :
선택 목록은 또한 HAVING 절에서 사용할 수있는 동일한 표현이 들어 있으므로이 하나를 시도하십시오 :
SELECT COL1,COUNT(COL2) AS COL7 FROM --SOME JOIN OPERATION GROUP BY COL1 HAVING COUNT(COL2) >= 3
-
==============================
4.당신은 COUNT () 열을 사용하여 두 번 선택해야합니다
당신은 COUNT () 열을 사용하여 두 번 선택해야합니다
select * from (select col1,count(col2) as col7 from --some join operation group by col1) as temp where temp.col7 >= 3
-
==============================
5.U이 코드를 사용할 수 있습니다 :
U이 코드를 사용할 수 있습니다 :
IF OBJECT_ID('tempdb..#temp') is not null DROP TABLE #temp -- Create tempurary table CREATE TABLE #temp (Id BIGINT IDENTITY(1,1), col1 BIGINT, countOfcol2 BIGIN) --insert from the table 2 #temp INSERT INTO #temp (col1,countOfcol2) select col1,count(col2) as col7 from --some join operation select col1,countOfcol2 from #temp group by col1 having countOfcol2 >= 3 -- replace col7 by count(col2) to make the code work
-
==============================
6.당신은 중첩 된 쿼리를 사용하여이 문제를 해결할 수 있습니다.
당신은 중첩 된 쿼리를 사용하여이 문제를 해결할 수 있습니다.
나는 또한 성능을 개선하고자하고이 문제로 실행했다. 나는 테이블의 JSON 필드 내의 특정 필드를 기반으로 카운트 ()를 실행하는 데 필요한 한, 분명히 우리는 (같은 특히 비용을 절을 A의 별도의 수를 포함하는 경우 또는이 필요없이 한 번만 대신 JSON을 구문 분석 할 것 나의 경우에는).
COL1은 고유 ID 인 경우, 가장 효율적인 계산 방법은 둥지에 별도의 선택의 수가 될 수있다
select col1, innerquery.col7 from whatevertable inner join (select col1, count(col2) as col7 from whatevertable group by col1) as innerquery on innerquery.col1 = whatevertable.col1 where innerquery.col7 >= 3;
이 방법 카운트 쿼리의 나머지 부분에 의해 참조 임시 조회 테이블의 종류를 생성, 한 번 실행 전용입니다.
COL1은 일반적으로 대부분의 테이블 ID를 기본 키의 일종이 있기 때문에 무리한 요구하지 않습니다 모든 레코드에 대한 고유 한 경우 다시, 이것은에만 작동합니다.
-
==============================
7.선택 COL1, col7으로 계산 (COL2) --some은 조인 작업에서 COL1에 의해 그룹 (COL2) 카운트를 갖는> = 3;
선택 COL1, col7으로 계산 (COL2) --some은 조인 작업에서 COL1에 의해 그룹 (COL2) 카운트를 갖는> = 3;
솔직히 저는 SQL Server가 열 별칭을 처리하지 않는 이유에 느냐고 묻는 사람입니다. 나는 해결 방법으로 사용합니다. 그것은 여전히 원래 집계 함수를 사용하여 별칭하지만, 프로세스 등의 열 이름을 인쇄합니다.
from https://stackoverflow.com/questions/14048672/why-cant-i-use-an-alias-for-an-aggregate-in-a-having-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 같은 테이블에서 날짜 범위를 중복 감지 (0) | 2020.06.04 |
---|---|
[SQL] PostgreSQL을에 INSERT 또는 UPDATE에 의해 영향을받는 레코드 수를 가져옵니다 (0) | 2020.06.04 |
[SQL] 어떻게 JPA / 최대 절전 모드에서 네이티브 SQL 스크립트를 실행 할 수 있습니까? (0) | 2020.06.04 |
[SQL] 매장 달 년 만에 MySQL의 데이터 형 (0) | 2020.06.03 |
[SQL] 업데이트 타임 스탬프없이 업데이트 항목 (0) | 2020.06.03 |