2016-08-19 3 views
0

나는 훑어 보았지만 많은 다른 예제를 발견했지만 그 중 아무 것도 작동하지 않는 것으로 나타났습니다. 내가 가진 가장 가까운 것은 () 이상 이었지만 구문 오류로 인해 실패했습니다.전체 합계의 하위 합계 비율을 계산합니다.

다음 쿼리를 고려하십시오.

select Id, 
    count(*) as Count, 
    sum(Amount) as Sum 
from MyTable 
group by Id 

결과 발생 횟수와 달했다 값 이드의 목록이다. 이것은 잘 작동합니다. 그러나 각 총계가 얼마나 많은 부분이 총계에 있는지도 보여주고 싶습니다. 나는 다음을 시도했다.

select Id, 
    count(*) as Count, 
    sum(Amount) as Sum, 
    sum(Amount)/sum(Amount) over() as Ratio 
from MyTable 
group by Id 

그것은 실패하고 I합니다 ( 이상 꼬추가 더 안정적 지식보다 생각이었다 대부분 때문에) 그것을 해결하는 방법을 모르겠어요.

답변

2

당신은 다음에 할 수있는 모든 기록의 총 금액을 검색해야합니다

SELECT sum(Amount) FROM MyTable

하고 쿼리의 sum(Amount)에 제수로 그 넣어. 그래서 쿼리는 다음과 같이 표시됩니다 : 당신의 Amount 데이터 유형이 INT 경우

select Id, 
     count(*) as Count, 
     sum(Amount) as Sum, 
     sum(Amount)/(SELECT sum(Amount) FROM MyTable) as Ratio 
from  MyTable 
group by Id 

, 당신은 decimal 데이터 유형으로 비율을 캐스팅해야 할 수도 있습니다. 예를 들면 :

select Id, 
     count(*) as Count, 
     sum(Amount) as Sum, 
     CAST (sum(Amount) AS NUMERIC(10,2))/(SELECT sum(Amount) FROM MyTable) as Ratio 
from  MyTable 
group by Id 

[편집] :

SELECT [Id], [Count], [Sum], [SUM]/SUM([SUM]) OVER (PARTITION BY 1) 
FROM 
(
     select Id, 
        count(*) as Count, 
        sum(Amount) as Sum    
     from  MyTable 
     group by Id 
) as t 
+0

좋은 제안 : 당신이 OVER 절을 사용하려면, 내가 한 번 더 하위 쿼리가 당신을 건의 할 것입니다. 그러나, 나의 특별한 경우에, 서브 - 쿼리는 거대 할 것이다 (조인, wheres, sub-sub-select 등). 나는 게으른 사람의 해결책을 원했습니다. hehe. 그걸로 끝날 수 있습니까? –

관련 문제