필드의 합계를 선택하려면 SELECT 문을 쓰려고하지만 30보다 작은 숫자와 30보다 큰 숫자의 합을 반환하고 싶습니다. 두 개의 선택을 함께하면이 작업을 수행 할 수 있다는 것을 알았습니다 그러나 나는 그것을 "깔끔하게"하는 방법을 찾기를 희망했다. 이 라인을 따라30보다 작은 숫자의 합계와 30보다 큰 숫자의 합을 선택하는 방법은 무엇입니까?
답변
뭔가 (사용자 환경의 구문을 정정) : 만약 내가 제대로 이해하고
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
+1 깨끗합니다. 당신이 필요로하는 성능이라면, 무엇이든 합치는 토우를 이길 것입니다. –
열에 색인이 있다고 가정합니다. –
이 쿼리에 성능 문제가 있다고 생각하지 않습니다. 또는 다른 방법으로 말하자면 두 개의 분리 된 선택이 더 빠를 이유가 없습니다. Field에 인덱스가 있고 Field가 null이 아닌 경우이 인덱스는 해당 인덱스에 액세스하여 해결할 수 있습니다. – Thilo
, 당신은 숫자 값이 단일 열이 있고 모든 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
감사합니다, 아툴
무시하십시오. 답변은 이미 Vilx에 의해 게시되었습니다. 아툴 – Atul
요구 사항은 큰 막연한,하지만 난 행에 걸쳐 SUM을 가정합니다 및 <> (30)이 사건의 대답 다르다.
SELECT
SelectCol1, SelectCol2, SelectCol3, ..., SUM(AggregateCol)
FROM
Table
GROUP BY
SelectCol1, SelectCol2, SelectCol3, ...
HAVING
SUM(AggregateCol) <> 30
합계가 30 인 경우 아무 것도 관심이 없습니다. – pjp
SUM 행의 합계와 같습니까? "<> 30"이라는 뜻입니까? – gbn