[英]how to calculate YTD average for each day in sql?
dates product price
| 2020-01-01 | 筆記本電腦| 高分辨率照片| CLIPARTO 210 |
| 2020-01-01 | 電腦 | 100 |
| 2020-01-02 | 筆記本電腦| 高分辨率照片| CLIPARTO 150 |
| 2020-01-02 | 電腦 | 200 |
| 2020-01-03 | 筆記本電腦| 高分辨率照片| CLIPARTO 150 |
| 2021-01-01 | 電腦 | 110 |
| 2021-01-01 | 筆記本電腦| 高分辨率照片| CLIPARTO 220 |
2021-01-02 | 電腦 | 210 |
2021-01-02 | 筆記本電腦| 高分辨率照片| CLIPARTO 200 |
2021-01-03 | 電腦 | 260 |
有必要按產品計算自年初以來每天的平均值。 將日期 2020.01.02 添加到 2020.01.01 並除以 2(150+210)/2
嘗試類似:
SELECT product, AVG(price) FROM your_table WHERE dates >= '2021-01-01' GROUP BY product
SELECT dates, AVG(price) FROM your_table WHERE dates >= '2021-01-01' GROUP BY dates
SELECT product, dates, AVG(price) FROM your_table WHERE dates >= '2021-01-01' GROUP BY product, dates
我不知道 mysql 但在 sql 服務器和 oracle 數據庫中它會是這樣的。
WITH YOUR_TABLE_DATA (DATED,PRODUCT,PRICE)AS
(
SELECT CAST('2020-01-01' AS DATE)DATED,'laptop', 210 UNION ALL
SELECT '2020-01-01', 'pc', 100 UNION ALL
SELECT'2020-01-02' , 'laptop', 150 UNION ALL
SELECT'2020-01-02', 'pc', 200 UNION ALL
SELECT'2020-01-03', 'laptop', 150 UNION ALL
SELECT '2021-01-01', 'pc' , 110 UNION ALL
SELECT'2021-01-01', 'laptop', 220 UNION ALL
SELECT'2021-01-02', 'pc', 210 UNION ALL
SELECT'2021-01-02', 'laptop', 200 UNION ALL
SELECT'2021-01-03', 'pc', 260
)
SELECT C.DATED,C.PRODUCT,C.PRICE,
AVG(C.PRICE)OVER(PARTITION BY C.PRODUCT ORDER BY C.DATED ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)X_AVG
FROM YOUR_TABLE_DATA AS C
ORDER BY C.PRODUCT,C.DATED
在 MySQL8.0 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b0124122a665975bf096ff02ea4832f0 上測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.