2008-11-11 2 views
3

SQL 문에 group by 절이 있고 집계 함수를 사용하여 Sum()과 같이 추가하는 대신 각 그룹의 모든 값을 빼야합니다. 기능.sql 함수와 같은 Sum() 대신에 빼기 방법

즉 2 + 1을 평가하고 나는이 말이 1.

희망을 반환 2-1을하는 방법이 필요 3.

돌아갑니다 ..so

SELECT Sum(A) 
FROM ( 
    SELECT 2 AS A 
    UNION 
    SELECT 1) AS t1 

. 이 작업을 수행하는 유일한 방법은 CLR 통합을 사용하여 자체 집계 함수를 만드는 것입니다.

다른 아이디어?

+0

하지 않을 것이라고를 – FlySwat

+0

2-1은 0이 아닌 1과 같습니다. – HAdes

+0

귀하의 고안된 예에서 그렇습니다. 그러나 많은 양의 데이터를 그룹화 할 때 귀하의 노력을 볼 수 없습니다. – FlySwat

답변

2

뺄 항목을 어떻게 식별 하시겠습니까?

일단 식별되면 SUM()-1을 곱한 다음 해당 값에 추가됩니다.

편집 :

는 다음을 두 번, 그 값을 감산으로 간주되는 첫 번째 값의 경우, 모든 값의 합계를 빼앗아.()

select top 1 @var = [value] 
from myTable 
order by [some condition] 

select @minused = (2 * @var) - sum([value]) 
from myTable 
+0

아무 것도 식별 할 필요가 없습니다. 나는 단순히 첫 번째 가치를 가지고 다른 모든 것을 빼앗아 가고 싶다. 예 : 2-1-1-2-3 ... 등등. 그런 다음 결과가 나올 수 있으며 차별화를 얻을 수 있습니다. – HAdes

+0

HAdes, 나는 그것이 당신이 원하는 것을 믿습니다. – kristof

0

합 (두배가. 모든 값들의 합에 등의 효과를 상쇄) 2-1 반면 == 2 + 1 + 1 (2)와 같이 작동한다! = 1-2 따라서 ORDER BY가 변경되면 이러한 함수가 존재할 경우 다른 함수가 생성됩니다. 당신이 싶어 왜

+0

나는 이것을 이해하지만 어쨌든 나는 그 대답을 절대적으로 용인 할 것이다. abs (2-1)은 abs (1-2)와 동일합니다. 미안해. 내가 말할 필요가 없을 것 같아. – HAdes

+0

두 값에 대해 작동합니다. 더 많은 정보를 얻으려면 abs (1-2-3)! = abs (3-2-1)을 얻을 수 있습니다. – che

0

는 잘 모르겠지만, 난 그냥 반환 된 데이터의 음의 값 SUM 것 : 당신이 원하는 질문에서

SELECT Sum(A) 
FROM ( 
    SELECT (2 * -1) AS A 
    UNION 
    SELECT (1)) AS t1 
+0

예제는 데모 용입니다. 나는 실제로 노조를하고 있지 않다. 테이블 A에서 단순히 합계 (A)를 선택하면 제안한 것과 같이 행 중 하나를 무효화 할 수 없습니다. – HAdes

2

정확히 명확하지 않다을 해야 할 것. 모든 값의 합이 음수 인 것처럼 원하면 SUM()을 수행하고 -1로 곱하면 음수 결과를 반환 할 수 있습니다.

예를 들어, 테이블의 첫 번째 행의 합계에서 다른 모든 값을 뺀 값을 얻고 싶습니다. 따라서 값이 10, 15, 5, 20이면 10 - 15 - 5 - 20입니다.이 값은 10 - (15 + 5 + 20)과 같습니다. LIMIT을 사용하여 표의 첫 번째 행을 가져올 수 있습니다. 우리는 위의 하나를 제외한 모든 다른 행의 합계를 얻을 수 있습니다

SELECT primary_key AS pk, field FROM table LIMIT 1; 

:

SELECT SUM(field) FROM table WHERE primary_key != pk; 

당신은 다음 두 번째 값을 뺄 수 있습니다 우리는 또한 다음 단계에 대한 기본 키가 필요합니다 처음부터. 당신은 아마 서로를 사용할 필요 해요 신뢰할 수있는 순서를 얻기 위해 선택했지만

SELECT SUM(CASE WHEN ROWNUM=1 THEN 2*A ELSE -A END) 
FROM foo 

:

SELECT SUM(b) 
FROM (
    SELECT CASE WHEN ROWNUM=1 THEN 2*a ELSE -a END AS b 
    FROM foo 
    ORDER BY ??? 
); 
2

의견을 읽기

, 난 당신이 뭔가를 원한다고 생각 항상 0으로 평가됩니까?
+0

그냥 SQL Server 질문이었습니다. 저는 Oracle 질문을보고 있다고 생각했습니다. 도움이 될 경우를 대비하여 답을 남겨 둘 것입니다. –