我有一個包含多個相等日期條目和一個值的表。我需要一個表格來計算歷史值和每個日期的條目數。我想稍后使用這些資料在 gnuplot/etc 中創建一些圖表。
原始資料:
date | value
------------ ------
2017-11-26 | 5
2017-11-26 | 5
2017-11-26 | 5
2017-11-28 | 20
2017-11-28 | 5
2018-01-07 | 200
2018-01-07 | 5
2018-01-07 | 20
2018-01-15 | 5
2018-01-16 | 50
輸出應該是:
date | avg | count manual calc explanation
------------ -------- ------- ---------------------------------------
2017-11-26 | 5 | 3 (5 5 5) / 3 = 5
2017-11-28 | 8 | 2 (5 5 5 20 5) / 5 = 8
2018-01-07 | 33.125 | 3 (5 5 5 20 5 200 5 20) / 8 = 33.125
2018-01-15 | 30 | 1 (5 5 5 20 5 200 5 20 5) / 9 = 30
2018-01-16 | 32 | 1 (5 5 5 20 5 200 5 20 5 50) / 10 = 32
如果無法計算兩個不同的列,我可以使用 avg 列。為了只計算日期,我有解決方案“SELECT DISTINCT date, COUNT(date) FROM table_name GROUP BY date ORDER BY date”
我嘗試了 DISTINCT、GROUP BY、JOIN 等,但沒有找到任何解決方案。我在網上找到了一些其他文章,但沒有人涵蓋日期在表格中多次列出的情況。
uj5u.com熱心網友回復:
您需要一個運行平均值(總值除以該行的總計數)。這是通過視窗函式完成的。
select
date,
sum(sum_value) over (order by date) as running_sum,
sum(cnt) over (order by date) as running_count,
sum(sum_value) over (order by date) /
sum(cnt) over (order by date) as running_average
from
(
select date, sum(value) as sum_value, count(*) as cnt
from mytable
group by date
) aggregated
order by date;
演示:https : //dbfiddle.uk/?rdbms=postgres_13&fiddle=fb13b63970cb096913a53075b8b5c8d7
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321576.html
標籤:sql PostgreSQL 平均数
