이 평균 가격 루프를 더 빠르게 수행할 수 있는 방법이 있습니까?
나는 내가 원하는 수량의 평균 가격을 계산하는 기능을 가지고 있습니다.이것이 내 테이블이라고 가정해 보겠습니다.
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
'programing' 카테고리의 다른 글
ASP.NET에서 응답에 파일을 쓴 후 Post Back이 작동하지 않음 (0) | 2023.08.18 |
---|---|
Twitter 부트스트랩의 트리 (0) | 2023.08.18 |
X-Powered-By: ASP와 같은 IIS 사용자 정의 헤더를 삭제하는 방법응답에서 NET? (0) | 2023.08.18 |
Ajax를 사용하여 테이블 내용을 새로 고친 후 데이터 테이블을 다시 그리시겠습니까? (0) | 2023.08.18 |
PHP에서 모호하고 잘못된 날짜 시간을 탐지하는 방법은 무엇입니까? (0) | 2023.08.18 |