programing

이 평균 가격 루프를 더 빠르게 수행할 수 있는 방법이 있습니까?

javamemo 2023. 8. 18. 20:40
반응형

이 평균 가격 루프를 더 빠르게 수행할 수 있는 방법이 있습니까?

나는 내가 원하는 수량의 평균 가격을 계산하는 기능을 가지고 있습니다.이것이 내 테이블이라고 가정해 보겠습니다.

Name:    Quantity:     Price:
Item A     10               1
Item A     20               2
Item A     20               3
Item A     20               4

만약 제가 A 품목의 평균 가격을 수량으로 원한다면, 35개라고 가정해 보겠습니다.저는 테이블 위에 루프하고 $total이 $quanity 이상이 될 때까지 수량을 합산합니다. 따라서 이 경우 1, 2, 3행이 되고 총 50개가 됩니다.

그러면 A 아이템의 평균 가격은 (10x1 + 20x2 + 20x3) / 50 = 2,2이고 이것이 제가 원하는 출력입니다.

하지만 많은 제품에 대해 이 작업을 수행하는 것은 매우 무겁습니다.

질문:.

위의 표를 출력하는 데 사용하는 쿼리 내에서 이러한 생각을 할 수 있는 방법이 있습니까?

다음과 같은 것:
SELECT DISTINCT(Name) as item, SUM(quantity) as Howmuch, MIN(single) as Min FROM Items WHERE item = 'Item A' AND Howmuch > 30 ORDER BY single?

어떤 도움이든 감사합니다!

한 가지 방법은 SUM OVER를 사용하여 누적 합계를 계산하는 것입니다.
그런 다음 그것에서 평균을 도출합니다.

표본 데이터:

create table Items
(
  Name varchar(30),
  Quantity int,
  Price decimal(16,2)
);

insert into Items 
(Name, Quantity, Price)
values
('Item A', 10, 1),
('Item A', 20, 2),
('Item A', 20, 3),
('Item A', 20, 4);

쿼리:

SELECT Name
, MIN(CumPriceTotal)/MIN(CumQuantity) AS AvgPrice
FROM
(
  SELECT Name
  , SUM(Quantity*Price) OVER (PARTITION BY Name ORDER BY Price, Quantity) as CumPriceTotal
  , SUM(Quantity) OVER (PARTITION BY Name ORDER BY Price, Quantity) as CumQuantity
  FROM Items
) q
WHERE CumQuantity >= 35
GROUP BY Name
ORDER BY Name;
이름 | 평균 가격:----- | -------:A항목 | 2.200000

db<>여기로 이동

사용하는 대신GROUP BY&MIN,사용.ROW_NUMBER첫 번째를 얻는 것도 이것에 효과가 있을 수 있습니다.
하지만 나는 그것을 느낍니다.GROUP BY더 간단합니다.

언급URL : https://stackoverflow.com/questions/60185686/is-there-a-faster-way-of-doing-this-average-price-loop

반응형