반응형
평균 가중 가격을 찾기 위한 쿼리
Oracle에 지정된 부품당 여러 행이 있는 테이블이 있습니다.각 행에는 수량과 관련된 가격이 있습니다.또한 주어진 부품에 대한 행 집합이 더해진 총 수량도 있습니다.다음은 데이터의 샘플입니다.제가 필요한 것은 부품의 평균 가중 가격을 받는 것입니다.예를 들어 부품의 수량이 100이면 가격이 1이고 수량이 50이면 가격이 2이면 가중 평균 가격은 1.3333333입니다.
PART TOTAL_QTY QTY PRICE_PER
----------------------------------
part1 317 244 27
part1 317 40 53.85
part1 317 33 24.15
아이디어?
사용해 보십시오.
SELECT part, SUM(qty*price_per)/SUM(qty)
FROM <YOUR_TABLE>
GROUP BY part
사용자 정의 집계 함수를 생성하여 가중 평균을 계산합니다.
CREATE OR REPLACE TYPE WEIGHTED_AVG_O AS OBJECT (
sum_of_weights NUMBER,
sum_of_weights_times_value NUMBER,
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(cs_ctx IN OUT WEIGHTED_AVG_O) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE (self IN OUT WEIGHTED_AVG_O, value IN WEIGHTED_AVG_O) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE (self IN OUT WEIGHTED_AVG_O, ctx2 IN OUT WEIGHTED_AVG_O) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE (self IN OUT WEIGHTED_AVG_O, returnvalue OUT NUMBER, flags IN NUMBER) RETURN NUMBER
);
/
CREATE OR REPLACE TYPE BODY WEIGHTED_AVG_O
AS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(cs_ctx IN OUT WEIGHTED_AVG_O) RETURN NUMBER
IS
BEGIN
cs_ctx := WEIGHTED_AVG_O(0, 0);
RETURN odciconst.success;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE (self IN OUT WEIGHTED_AVG_O, value IN WEIGHTED_AVG_O) RETURN NUMBER
IS
BEGIN
self.sum_of_weights := self.sum_of_weights + value.sum_of_weights;
self.sum_of_weights_times_value := self.sum_of_weights_times_value + value.sum_of_weights * value.sum_of_weights_times_value;
RETURN odciconst.success;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE (self IN OUT WEIGHTED_AVG_O, ctx2 IN OUT WEIGHTED_AVG_O) RETURN NUMBER
IS
BEGIN
RETURN odciconst.success;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE (self IN OUT WEIGHTED_AVG_O, returnvalue OUT NUMBER, flags IN NUMBER) RETURN NUMBER
IS
BEGIN
IF sum_of_weights = 0 THEN
returnvalue := NULL;
ELSE
returnvalue := sum_of_weights_times_value / sum_of_weights;
END IF;
RETURN odciconst.success;
END;
END;
/
CREATE OR REPLACE FUNCTION WEIGHTED_AVG (input WEIGHTED_AVG_O)
RETURN NUMBER PARALLEL_ENABLE
AGGREGATE USING WEIGHTED_AVG_O;
/
데이터 쿼리:
SELECT part, WEIGHTED_AVG(WEIGHTED_AVG_O(qty, price_per))
FROM <YOUR_TABLE>
GROUP BY part;
언급URL : https://stackoverflow.com/questions/4740489/query-to-find-an-average-weighted-price
반응형
'programing' 카테고리의 다른 글
단순 getColumnName(0) 호출이 잘못된 열 인덱스를 던집니다. getValidColumnIndex (0) | 2023.08.25 |
---|---|
Base 64 인코딩과 이미지 파일 로드 (0) | 2023.08.25 |
Rails: 다른 컨트롤러에서 .js.erb를 렌더링하시겠습니까? (0) | 2023.08.25 |
코드 점화기에서 아약스 호출에서 게시물이 왔는지 확인하는 방법은 무엇입니까? (0) | 2023.08.25 |
C 언어에서 #line의 의미는 무엇입니까? (0) | 2023.08.25 |