2013-06-03 3 views
2

내가 가진 문제는 Postgres에서 고유하지 않은 값 또는 "sales"가 아닌 SUM을 사용하면 고유하지 않은 누적 합계 또는 "running sales"가 발생한다는 것입니다.반복되는 값을 합산 할 때 뚜렷한 합계를 얻는 방법은 무엇입니까?

SELECT *, 
     SUM(Sales) OVER (ORDER BY sales DESC) as running_sales 
FROM t; 

Here is the output

은 기본적으로 내가이 테이블 읽고 싶은 :

 
4--Motherboards------- 22----399 
5--RAID Controllers----22----421 

사람이 내가 이것을 할 수있는 방법에 대한 아이디어가 있습니까 여기

쿼리입니까?

제외 : 사람이 관심이 있다면, 이것이 내가 두 번째 ORDER BY 항목으로 id을 추가하여 following

답변

3

OVER 절에서 순서를 특별하게 만드는 무엇이다 :

SELECT *, 
     SUM(Sales) OVER (ORDER BY sales DESC, id) as running_sales 
FROM t 
ORDER BY sales DESC, id; 

당신이 그것을 가지고하는 방법, 동등한 매출액은 동일한 FRAME의 동료로 취급되어 한꺼번에 합산됩니다.
tutorial you were following은이 특정 검색어에 적합하지 않습니다.

안정적인 결과를 얻으려면 쿼리에 ORDER BY을 추가하는 것이 좋습니다. 이는 창 함수의 정렬 순서와 일치하므로 매우 저렴합니다.

현재 구현되는 방식은 가장 간단한 방법이기 때문에 간단한 쿼리의 창 함수 순서대로이 쿼리의 결과를 얻는 것이 일반적입니다. 그러나 Postgres는 ORDER BY이없는 행의 순서에 대해서는 보증하지 않습니다. 경고없이 임의의 순서가 변경 될 수 있습니다.

+0

완벽하고 정확하게 필요한 것. 고맙습니다! – rennatnart

+0

@ user2449623 : '주문'에 대한 추가 정보를 고려하십시오. –