2014-02-24 3 views
0

나는, COUNT (*)를 참조 전체로 저장하고 나중에 참조하기 위해 노력하고 있지만,이 예에 대한참조 카운트 (*)

작동하지 않습니다 :

select ((count(*) as total)-count(a)), 
    (total - count(b)), 
    (total - count(c)) 
    from table; 

무엇이 잘못 되었습니까?

답변

0
SELECT (count(*) - count(a)) AS Column1 
     ,(count(*) - count(b)) AS Column2 
     ,(count(*) - count(c)) AS Column3 
from table; 
+0

그냥 count (*)를 한 번 저장하고 어딘가에 저장하고 싶습니다. – user2942227

0

무엇이 잘못 되었나요? SQL에서는 동일한 select 문에서 열 별칭을 사용할 수 없습니다.

select a as b, b as a, b - c 

무엇에 세 번째 b 참조 않습니다이 같은 것들에 의한 모호성을 방지하는 것입니다? 표준은 명확합니다 : 표의 열을 나타냅니다.

또한 표현식의 중간에 열 별칭을 정의 할 수 없습니다. 변수는 아니고 결과 집합의 열 이름입니다.

:

select (count(*) - count(a)), 
     (count(*) - count(b)), 
     (count(*) - count(c)) 
    from table; 

난 그냥 당신이 하위 쿼리를 사용하여 다른 SQL 언어에서와 마찬가지로 당신이 하이브에서이 작업을 수행 할 수 있다고 생각 :

당신은 표현 count(*)와 단어 total을 대체하여이 문제를 해결할 수 있습니다

select (const.total - count(a)), 
     (const.total - count(b)), 
     (const.total - count(c)) 
from table cross join 
    (select count(*) as total from table) const 
+0

하이브에서는 작동하지 않습니다. 어딘가에 카운트 (*)를 저장하고 반복해서 계산하지 않으려합니다. – user2942227