2009-09-18 2 views

답변

1

여기에서 주문을 정의해야합니다.

somecolumn으로 주문한다고 가정하십시오. OraclePostgreSQL 8.4에서

:

SELECT animal, valx, SUM(valx) OVER (PARTITION BY animal ORDER BY somecolumn) AS valy 
FROM mytable 

MySQL에서 : SQL Server에서

SELECT animal, valx, 
     @valy := CASE WHEN @animal = animal THEN @valy + valx ELSE valx END AS valy, 
     @animal := animal 
FROM (
     SELECT @valy = 0, 
       @animal := NULL 
     ) vars, 
     mytable 
ORDER BY 
     animal, somecolumn 

이는 드문 경우 중 하나는 CURSOR를 만들 때 것이 더 효율적입니다. 지원 ANSI 구문 (SQL Server 포함)

모든 데이터베이스 :

SELECT animal, valx, 
     (
     SELECT SUM(valx) 
     FROM mytable mi 
     WHERE mi.animal = mo.animal 
       AND mi.somecolumn <= mo.somecolumn 
     ) AS valy 
FROM mytable mo 

그러나, 이것은 실행 시간은 O(n^2) 사용하는 RDBMS

+0

SQL Server의 마지막 쿼리는 입력 테이블에서와 정확히 동일한 데이터를 반환합니다. –

+0

@Quassnoi 제가 제공 한 대체 접근법을지지하는지 잠시 확인해주십시오. 나는 stackoverflow에 대한 귀하의 작품에 감탄했습니다. –

+0

@ 브라이언 : 대체 어떻게 달라 집니까? – Quassnoi