2009-07-03 4 views
3

필드의 합계를 선택하려면 SELECT 문을 쓰려고하지만 30보다 작은 숫자와 30보다 큰 숫자의 합을 반환하고 싶습니다. 두 개의 선택을 함께하면이 작업을 수행 할 수 있다는 것을 알았습니다 그러나 나는 그것을 "깔끔하게"하는 방법을 찾기를 희망했다. 이 라인을 따라30보다 작은 숫자의 합계와 30보다 큰 숫자의 합을 선택하는 방법은 무엇입니까?

+1

합계가 30 인 경우 아무 것도 관심이 없습니다. – pjp

+0

SUM 행의 합계와 같습니까? "<> 30"이라는 뜻입니까? – gbn

답변

19

뭔가 (사용자 환경의 구문을 정정) : 만약 내가 제대로 이해하고

SELECT 
    sum(case when Field < 30 then Field else 0 end) as LessThan30, 
    sum(case when Field > 30 then Field else 0 end) as MoreThan30 
FROM 
    DaTable 
+0

+1 깨끗합니다. 당신이 필요로하는 성능이라면, 무엇이든 합치는 토우를 이길 것입니다. –

+0

열에 색인이 있다고 가정합니다. –

+0

이 쿼리에 성능 문제가 있다고 생각하지 않습니다. 또는 다른 방법으로 말하자면 두 개의 분리 된 선택이 더 빠를 이유가 없습니다. Field에 인덱스가 있고 Field가 null이 아닌 경우이 인덱스는 해당 인덱스에 액세스하여 해결할 수 있습니다. – Thilo

1

, 당신은 숫자 값이 단일 열이 있고 모든 THW이 필드의 합계를 찾으려면 필드 값이 30보다 작은 행 및 30보다 큰 필드 값의 변이와 동일한 조건.이 값이 맞으면 다음 쿼리를 사용하여 그에 따라 테이블과 열 이름을 replcae 할 수 있습니다.

SELECT SUM(CASE  WHEN col1 < 30 THEN COL1  ELSE 0 END 
     ) SUM(CASE  WHEN col1 < 30 THEN COL1  ELSE 0 END 
     ) FROM DATABASE.SCHEMANAME.TABLE 

감사합니다, 아툴

+0

무시하십시오. 답변은 이미 Vilx에 의해 게시되었습니다. 아툴 – Atul

1

요구 사항은 큰 막연한,하지만 난 행에 걸쳐 SUM을 가정합니다 및 <> (30)이 사건의 대답 다르다.

SELECT 
    SelectCol1, SelectCol2, SelectCol3, ..., SUM(AggregateCol) 
FROM 
    Table 
GROUP BY 
    SelectCol1, SelectCol2, SelectCol3, ... 
HAVING 
    SUM(AggregateCol) <> 30 
관련 문제